【发布时间】:2016-03-17 12:01:30
【问题描述】:
我希望有人可以帮助解决这个问题:
我有一个使用 Azure AD 承载身份验证保护的 Web api,我有两个 Web 客户端可以使用 AD 中的承载令牌成功地在 Web api 上进行身份验证。 Web API 和两个 Web 应用程序都配置为 AD 中的应用程序。我尝试使用 ADAL for Cordova 访问 iOS/Android 应用程序的 web api,但它返回 401。
ClaimsPrincipal.Current.Identity.IsAuthenticated 返回错误。
我正在使用我在 Azure AD 中设置的本机应用程序的客户端 ID,并且我正在接收令牌,但此令牌无效。在我解析 jwt.io 上的令牌后,一切似乎都正确,但我注意到令牌没有标头。 我添加了访问 Web Api 并以用户身份登录和访问 AD 的权限。 我在 Cordova 中使用的代码如下,我使用的权限与其他正在运行的应用程序相同。其中 resource 是 AD 中 Web Api 的应用 ID,client id 是 Azure Ad 中本机应用的客户端 ID。
// Attempt to authorize user silently
AuthenticationContext.acquireTokenSilentAsync(resource, clientId)
.then(function (result) {
sessionService.logIn(result.idToken);
console.log(result);
deferred.resolve();
}, function () {
// We require user credentials so triggers authentication dialog
AuthenticationContext.acquireTokenAsync(resource, clientId, redirectUri)
.then(function (result) {
console.log(result);
sessionService.logIn(result.idToken);
deferred.resolve();
}, function (err) {
console.log("Failed to authenticate" + err);
deferred.reject("failed to authenticate");
});
});
我也尝试过使用 result.accessCode,但它也不起作用。 Web Api 中的 StartUp.Auth.cs:-
app.UseCors(Microsoft.Owin.Cors.CorsOptions.AllowAll);
app.UseWindowsAzureActiveDirectoryBearerAuthentication(
new WindowsAzureActiveDirectoryBearerAuthenticationOptions
{
Tenant = ConfigurationManager.AppSettings["ida:Tenant"],
TokenValidationParameters = new TokenValidationParameters {
ValidAudiences = Audiences
}
});
}
有人可以帮忙吗?
谢谢
【问题讨论】:
标签: asp.net-web-api azure-active-directory adal