#angular #azure #azure-active-directory #strapi
#angular #azure #azure-active-directory #strapi
Вопрос:
Я пытаюсь настроить аутентификацию с использованием Microsoft в приложении Angular. Я могу успешно пройти аутентификацию в приложении. Когда я отправляю токен, который я получаю http://localhost:1337/auth/microsoft/callback?access_token=${token}
, я получаю ответ, в котором говорится: «Ошибка проверки токена доступа. Недопустимая аудитория.’ Я проверил токен, который я отправляю в jwt.io и аудитория соответствует идентификатору клиента, настроенному в конфигурации администратора Strapi для поставщика Microsoft. Я пропустил шаг?
Мой запрос выглядит следующим образом и запускается после завершения аутентификации и установки токена.
let token = window.localStorage.getItem('msal.idtoken') this.http.get(http://localhost:1337/auth/microsoft/callback?access_token=${token}`) .subscribe((res) => { console.log(res); });
Редактировать:
Регистрация приложения Azure:
Конфигурация Strapi:
Редактировать:
Не понял, что токен доступа был отделен от idToken. После того, как я покопался во вкладке «Сеть», я нашел фактическую и опубликовал ниже. Вызов этого api в Strapi возвращает действительный токен. Похоже, что это работает. Но я не знаю, как программно извлечь этот токен во внешнем интерфейсе, поскольку он вызывается как URI перенаправления. Существует ли общая стратегия для захвата его из URL-адреса, прежде чем он исчезнет, для сохранения в хранилище?
Accesstoken:
Разрешения:
Комментарии:
1. Покажите разрешение, настроенное вами в приложении Azure AD, и скриншот декодированного токена доступа в jwt.io .
2. Я обновил сообщение скриншотами
3. Предоставленный вами снимок экрана предназначен для токена ID, а не для токена доступа. Пожалуйста, проверьте это. Мне нужен декодированный результат для токена доступа. Кроме того, мне также нужен снимок экрана с разрешениями, которые вы настроили в приложении Azure AD. Вы должны найти его в разрешениях API в вашем приложении для регистрации приложений.
4. Спасибо, я добавил дополнительную информацию. Фактический токен доступа работает, но я не уверен, как его получить, потому что он быстро перенаправляет с этой страницы. Есть идеи?
5. Привет, вы все еще ищете помощь по этой проблеме? Решает ли ответ вашу проблему?
Ответ №1:
В вашем коде я обнаружил, что вы получаете токен id и используете его для доступа к своему api, как вы упомянули, это вызовет сбой токена доступа. Недопустимая аудитория.’ ошибка.Вы должны использовать токен доступа для доступа к вашему api.
Что касается вашего вопроса, хотите ли вы программно получить токен доступа?Если это так, вы можете обратиться к этому.
Код обычно выглядит следующим образом:
getToken() {
const accessTokenRequest = {
scopes: [
"your api url",
],
clientId: "xxxxxxxxxxxxxxxx",
authority: "https://login.microsoftonline.com/(tenant)ID or tenant name",
redirectUri: "http://localhost:4200",
};
this.authService
.acquireTokenSilent(accessTokenRequest)
.then((res) => {
console.log("acquireTokenPopup");
this.token = res.accessToken;
this.getUser();
})
.catch((e) => {
console.log("acquireTokenPopup catch");
console.log(e);
});
}
И если вы просто хотите сохранить токен доступа:
Чтобы сохранить строку в локальном хранилище, вы используете
window.localStorage.setItem(key, value);
Вы можете получить значение позже с помощью:
window.localStorage.getItem(key);
окно.localStorage.setItem(‘access_token’,token);
окно.localStorage.getItem(‘access_token’);
надеюсь, это вам поможет.