Azure EasyAuth: ошибка неавторизованного пользователя при попытке войти с учетной записью Microsoft - PullRequest
0 голосов
/ 02 января 2019

Это меня несколько часов сбивало с толку, поэтому я пытался заставить 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

Это показывает мне следующее enter image description here

Этот URL работает для других провайдеров, Google, Facebook и Twitter.Для всех из них он перенаправляет пользователя на страницу входа провайдера.

В соответствии со страницей ошибок и содержимым адресной строки, клиент не существует, который может ссылаться на приложение, созданное в Azure, чтобы разрешить моемувеб-сайт доступ к API.Но все было настроено правильно.Было бы полезно, если бы кто-то из Служб приложений We Azure мог взглянуть на это.Я создал приложение и добавил идентификатор приложения и секретную страницу служб приложений.

enter image description here

- Обновление 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);

    });
}

1 Ответ

0 голосов
/ 04 января 2019

Мне удалось найти причину проблемы.Поэтому в основном только сгенерированные токены Live Connect SDK действительны для

https://xxx.azurewebsites.net/.auth/login/microsoftaccount

Мы использовали MSAL, который генерировал токены, действительные только в Azure Active Directory.Я связался со службой поддержки Azure и попросил их обновить документацию.В настоящее время это очень сбивает с толку, так как ничего из этого не было объяснено в документации EasyAuth.

Мы решили использовать Azure AD B2C, так как она более надежна и дешевле для нас.Если кто-то захочет использовать EasyAuth с учетной записью Microsoft, ниже показано, как получить токен доступа из Live SDK

    WL.Event.subscribe("auth.login", onLogin);

    WL.init({
        client_id: "xxxxxx",
        redirect_uri: "xxxxxx",
        scope: "wl.signin",
        response_type: "token"
    });

    WL.ui({
        name: "signin",
        element: "signin"
    });


    function onLogin(session) {
        if (!session.error) {

            var access_token = session.session.access_token;
            mobileClient.login('microsoftaccount', { 'access_token': access_token }, false)
                .then(function () {
                    console.log('TODO - could enable/disable functionality etc')
                }, function (error) {
                    console.log(`ERROR: ${error}`);
                });

        }
        else {
            console.log(`ERROR: ${session.error_description}`);
        }
    }

Ссылка на

...