Аутентификация в приложении Azure Mobile Service с помощью приобретенного токена ADAL.js

Я пытаюсь проверить подлинность приложения HTML в приложении мобильной службы Azure.

Настройка

Оба приложения используют AAD в качестве бэкэнда аутентификации, поэтому оба приложения имеют приложение, зарегистрированное в Active Directory:

Приложение Azure Mobile Service:

настроен как описано вhttps://azure.microsoft.com/en-gb/documentation/articles/mobile-services-how-to-register-active-directory-authentication/Я отредактировал манифест, чтобы включить поток клиентаВключите «единый вход и чтение профилей пользователей» в разделе «разрешения для других приложений» для «Windows Azure Active Directory»

HTML-приложение:

в разделе «Права доступа к другим приложениям» я добавил приложение Azure Mobile Service с делегированным разрешением «Доступ».

Мобильная служба Azure использует серверную часть .NET, в которую я включил и настроил пакет NuGet «Расширение внутренней безопасности .NET для мобильных служб Microsoft Azure», как описано вhttps://azure.microsoft.com/en-gb/documentation/articles/mobile-services-dotnet-backend-windows-phone-get-started-users/

Приложение HTML использует ADAL.JS и Angular:

adalAuthenticationServiceProvider.init(
{
    // Config to specify endpoints and similar for your app
    clientId: "<html app aad client id>",
    redirectUri: "<html app redirect uri>",
    endpoints: {
        '<AMS app client id>': 'https://ampapp.azure-mobile.net/'
    }
},
$httpProvider
);

Эта установка работает, как и ожидалось, я открываю свое html-приложение, аутентифицируюсь на Azure AD, получаю перенаправление на мое приложение и захожу в систему. Кроме того, когда я пытаюсь получить доступ к моей мобильной службе Azure, я вижу, что Adal.js внедряет носитель маркер.

Эта проблема

Токен на предъявителя не принят мобильной службой Azure - я получаю 401 не авторизованным. Я не знаю почему, но мобильная служба Azure использует собственный заголовок проверки подлинности, но все в порядке.

MSDN определяет так называемую «операцию входа в клиент-клиент» для службы Azure Mobile:

«Запрашивает токен аутентификации из мобильных служб Microsoft Azure, используя токен, уже полученный у провайдера идентификации». (https://msdn.microsoft.com/en-us/library/azure/jj710106.aspx)

Итак, давайте сделаем это:

 // obtain token for Azure Mobile Service from Adal.js
 var token = this.getAADToken(ZUMOAuthenticationProvider.Config().url);

 $http({
        method: 'POST',
        url: ZUMOAuthenticationProvider.Config().url + 'login/aad', 
        data: JSON.stringify({
                  "access_token" : token 
              }),
        headers: {
                 'X-ZUMO-APPLICATION': '<application key>'
       }).
       success(function (data, status, headers, config) {
            alert(data);
       }).
       error(function (data, status, headers, config) {
            alert(data);
       }); 

Примечание. Токен, полученный первой строкой, действительно является токеном доступа для приложения Azure Mobile Service, а не для приложения HTML.

Этот запрос POST также получает ответ 401. Так что я не знаю, как аутентифицировать мое приложение. Я также попробовал лазурный мобильный сервис js lib. Эта библиотека работает, но она использует всплывающее окно для аутентификации, но я не люблю добавлять другую библиотеку в мои проекты для нескольких вызовов REST.

Похожие проблемы

Пытаясь решить мои проблемы, я нашел другой пост Stackoverflow:

Почему моя мобильная служба Azure не принимает маркер-носитель, который ADAL.js отправляет?

та же проблема, нет решения (даже в чате, указанном в последнем комментарии)

Как защитить мобильную службу Azure с помощью Azure AD? ADAL.JS

тот же автор, что и выше, я проверил все упомянутое в принятом ответе, но это не работает

Я также взглянул на новые мобильные приложения Azure на новом портале управления Azure, но, похоже, они используют один и тот же механизм аутентификации.

Итак, как я могу получить это работает?

Ответы на вопрос(3)

Ваш ответ на вопрос