Получите токен авторизации для вызова API - PullRequest
0 голосов
/ 06 августа 2020

Я пытаюсь вызвать API, который я создал с помощью , следуя этим указаниям , я дошел до точки, когда я могу вызвать API из портала разработчика, используя токен JWT. Теперь я не понимаю, как клиентское приложение angular получит этот токен JWT для вызова API?

В настоящее время пользователи приложения angular находятся в Active Directory (тот же AD, который был используется в инструкциях по настройке API). Процесс входа осуществляется через библиотеку MSAL . Когда я пытаюсь получить токен, вызывая collectTokenSilent , и пытаюсь вызвать API с помощью этого токена, я получаю ошибку 401.

Как мне получить правильный токен JTW из angular приложение?

введите описание изображения здесь

Ответы [ 2 ]

1 голос
/ 07 августа 2020

Убедитесь, что вы предоставляете разрешения для своего клиентского приложения с разрешениями, которые вы предоставили в приложении api, выполните это do c.

Затем в consentScopes , используйте область api вашего api, вы можете найти Application ID URL на странице Expose an API вашего приложения API, например, что-то вроде api://xxxxxxxxxxxxxxx/api_usage

consentScopes: [
        '<Application ID URL>/scope'
      ],

Когда вы получите токен , используйте ["<Application ID URL>/scope"] для scopes.

const requestObj = {
    scopes: ["<Application ID URL>/scope"]
};

this.authService.acquireTokenSilent(requestObj).then(function (tokenResponse) {
    // Callback code here
    console.log(tokenResponse.accessToken);
}).catch(function (error) {
    console.log(error);
});

Для получения дополнительных сведений см. Учебник: войдите в систему и вызовите Microsoft Graph API из Angular одностраничного приложения . В этом do c он вызывает MS Graph, чтобы вызвать ваш собственный api, изменить области, и он должен работать.

0 голосов
/ 07 августа 2020

Возможно, вы не сможете получить токен с помощью acquTokenSilentAsyn c в случае, если сеанс уже истек или в течение льготного периода. когда получить токен не удалось, вызов acquTokenAsyn c перенаправит пользователя на ввод пароля для входа.

authContext
    .acquireTokenSilentAsync(x,y,z)
    .then((authResponse: AuthenticationResult) => {
           // process authResponse
    })
    .catch(() => {
      authContext
        .acquireTokenAsync(x,y,x,"")
        .then((authResponse: AuthenticationResult) => {
           // process authResponse
        }).catch(() => {
           //do things
        }).finally(() => {
           //do things
        });
    });
...