Это меня несколько часов сбивало с толку, поэтому я пытался заставить EasyAuth работать с разными провайдерами.Я использую это в функциях Azure. Допустим, мой адрес функции:
https://xxx.azurewebsites.net
. Если я хочу войти в службу через учетную запись Google, я отправляю запрос на публикацию вместе с токеном.полученный от Google по следующему адресу
https://xxx.azurewebsites.net/.auth/login/google
Это возвращает мне конвертированный токен.
Однако, если я делаю то же самое с учетной записью Microsoft, используя следующую информацию
Тело запроса:
{ "access_token": "token-string-value" }
Конечная точка:
https://xxx.azurewebsites.net/.auth/login/microsoftaccount
Вместо преобразованного токена выдается следующая ошибка
401 Несанкционированный. У вас нет прав для просмотра этого каталога или страницы.
-
Я использую библиотеку Msal JavaScript для получения токена аутентификации.Кроме того, я тестирую их в Postman, что облегчает понимание проблемы до того, как я приступлю к работе с кодом и другими вещами.
- Обновление 1.0
Это похоже на ошибку, даже если я пытаюсь перейти к
https://xxx.azurewebsites.net/.auth/login/microsoftaccount
Это показывает мне следующее
Этот URL работает для других провайдеров, Google, Facebook и Twitter.Для всех из них он перенаправляет пользователя на страницу входа провайдера.
В соответствии со страницей ошибок и содержимым адресной строки, клиент не существует, который может ссылаться на приложение, созданное в Azure, чтобы разрешить моемувеб-сайт доступ к API.Но все было настроено правильно.Было бы полезно, если бы кто-то из Служб приложений We Azure мог взглянуть на это.Я создал приложение и добавил идентификатор приложения и секретную страницу служб приложений.
- Обновление 2.0
Поэтому после нескольких часов расследования мне удалось заставить работать URL-адрес, что шокирует, что это произошло из-за неверной информации, представленной на портале Azure.Ссылка в разделе «Авторизация и аутентификация» службы приложений указывает на новую платформу для регистрации приложений, предназначенную исключительно для пользователей на основе Azure AD.Чтобы внешние пользователи могли войти в приложение, необходимо зарегистрироваться на следующем портале
https://apps.dev.microsoft.com
После регистрации приложения здесь и добавления сведений в блейд-службу приложений,URL-адрес EasyAuth работает.Однако это не решает мою проблему.Мне все еще нужна библиотека JavaScript, которая дает мне действительный токен, который я могу передать конечной точке EasyAuth.
Странно, токен, полученный из MSAL, недействителен для учетной записи Microsoft.Это просто дает мне ту же ошибку, что мой доступ не авторизован.Это означает, что мне, вероятно, нужно использовать другую библиотеку, чтобы получить другой токен.Я был бы признателен, если бы кто-нибудь еще помог мне с этим.
Ниже приведен краткий пример кода, который я использую для извлечения токена и передачи его другой функции n, которая вызывает конечную точку EasyAuth и отправляет токен вместе с ним.
var applicationConfig = {
clientID: "xxxx-xxx-xxxx-xxxx",
authority: "https://login.microsoftonline.com/9fc1061d-5e26-4fd5-807e-bd969d857223",
graphScopes: ["user.read"],
graphEndpoint: "https://graph.microsoft.com/v1.0/me"
};
var myMSALObj = new Msal.UserAgentApplication(applicationConfig.clientID, applicationConfig.authority, acquireTokenRedirectCallBack,
{ storeAuthStateInCookie: true, cacheLocation: "localStorage" });
function signIn() {
myMSALObj.loginPopup(applicationConfig.graphScopes).then(function (idToken) {
//Login Success
acquireTokenPopupAndCallMSGraph();
}, function (error) {
console.log(error);
});
}
function signOut() {
myMSALObj.logout();
}
function acquireTokenPopupAndCallMSGraph() {
//Call acquireTokenSilent (iframe) to obtain a token for Microsoft Graph
myMSALObj.acquireTokenSilent(applicationConfig.graphScopes).then(function (accessToken) {
// accessToken
}, function (error) {
console.log(error);
});
}