Я использую ADAL.js с неявным потоком для аутентификации приложения AngularJS, чтобы получить доступ к API мобильных служб Azure.
Я настроил информацию об удостоверении Azure AD на вкладке «Идентификация» AMS (мобильная служба Azure) следующим образом...
URL-адрес приложения: https://‹>.azure-mobile.net/login/aad.
Идентификатор клиента — это идентификатор клиента из приложения, настроенного в Azure AD.
Допустимый арендатор: ‹>.onmicrosoft.com.
Заголовок включен в запрос GET: Авторизация: Bearer eyJ0eXAiOiJKV1Qi...
Но я получаю ответ 401 от AMS.
Что я делаю неправильно или упускаю?
ОБНОВЛЕНИЕ. Похоже, мне придется позвонить в конечную точку AMS, передав access_token Azure AD, чтобы получить токен AMS. И получаю такой ответ:
{"код":401,"ошибка":"Ошибка: аутентификация с помощью "windowsazureactivedirectory" не поддерживается."}
Итак, я думаю, мне придется использовать вход в систему, направленный на службу, как указано https://msdn.microsoft.com/en-us/library/azure/dn283952.aspx
Возможно, когда-нибудь это будет поддерживаться для серверной части javascript. Но чем больше я работаю с AMS, тем больше мне кажется, что я должен был использовать серверную часть .net.
ОБНОВЛЕНИЕ 29.05
Я изменил свой AMS на серверную часть .Net, чтобы использовать клиентский поток. Я использую следующий код:
client.login('aad', { "access_token": sessionStorage['adal.idtoken'] })
.done(function (results) {
alert("You are now logged in as: " + results.userId);
sessionStorage.X_ZUMO_AUTH = results.mobileServiceAuthenticationToken;
}, function (err) {
alert("Error: " + err);
});
Однако я получаю ответ 401.
ОБНОВЛЕНИЕ. На основании другой проблемы SO я создал второе приложение в Azure AD для клиента. Я установил его, чтобы разрешить доступ к приложению API. Я также обновил свой код до следующего:
adalService.acquireToken('<<AMS App Client ID>>')
.then(function(token) {
$http({
method: 'POST',
url: constants.apiBaseUrl + '/login/aad',
data: { "access_token" : token },
headers: {
'X-ZUMO-APPLICATION': constants.appKey
}
}).
success(function (data, status, headers, config) {
alert(data);
}).
error(function (data, status, headers, config) {
alert(data);
});
});
}
Но я все еще получаю 401. Я также пробовал это с мобильным SDK, все еще 401.