Аутентификация в приложении 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, но, похоже, они используют один и тот же механизм аутентификации.
Итак, как я могу получить это работает?