【发布时间】:2015-05-28 18:05:52
【问题描述】:
我正在使用带有隐式流的 ADAL.js 对 AngularJS 应用程序进行身份验证,以便能够访问 Azure 移动服务 API。
我已经在AMS(azure mobile service)的Identity选项卡中设置了Azure AD的身份信息如下...
应用网址设置为:https://.azure-mobile.net/login/aad
客户端 ID 是在 Azure AD 中设置的应用程序的客户端 ID。
允许的租户是:.onmicrosoft.com
GET 请求中包含标头:Authorization: Bearer eyJ0eXAiOiJKV1Qi...
但是我收到了来自 AMS 的 401 响应。
我做错了什么或错过了什么?
更新: 看起来我必须通过 Azure AD access_token 调用 AMS 端点来获取 AMS 令牌。我得到了这样的回应:
{"code":401,"error":"错误:不支持使用 'windowsazureactivedirectory' 进行身份验证。"}
所以,我想我将不得不使用指定的服务定向登录 https://msdn.microsoft.com/en-us/library/azure/dn283952.aspx
也许有一天这将支持 javascript 后端。但是,我使用 AMS 做的越多,我就越应该使用 .net 后端。
更新 05/29
我将我的 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。
【问题讨论】:
-
为了记录和完整性:1)发布的正确端点是/login/aad,而不是/login/windowsazureactivedirectory;但这仍然会返回一条明确的错误消息,即在这种情况下不允许发布访问令牌。 2) 使用 Mobile Service JS SDK 验证 AAD 用户时工作正常
-
对,我能够让服务定向身份验证工作。 msdn.microsoft.com/en-us/library/azure/dn283952.aspx
标签: azure azure-mobile-services adal