我希望有人可以帮忙解决这个问题:
我有一个使用Azure AD承载身份验证保护的Web api,我有两个Web客户端,可以使用来自AD的承载令牌在Web api上成功进行身份验证。 Web API和两个Web应用程序都配置为AD中的应用程序。我曾尝试使用ADAL for Cordova访问iOS / Android应用程序的web api,但它返回401.
ClaimsPrincipal.Current.Identity.IsAuthenticated
返回false。
我正在使用我在Azure AD中设置的本机应用程序的客户端ID,并且我收到了令牌,但此令牌无效。我在jwt.io上解析了令牌后,一切似乎都正确但我注意到令牌没有标题。 我已添加访问Web Api的权限,并以用户身份登录和访问AD。 我在Cordova中使用的代码如下,我正在使用的权限与正在运行的其他应用程序相同。其中resource是AD中Web Api的应用ID,客户端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
}
});
}
有人可以帮忙吗?
由于
答案 0 :(得分:1)
您似乎向API发送了错误的令牌 - 您应该发送result.accessToken。有关示例,请参阅https://github.com/Azure-Samples/active-directory-cordova-multitarget/blob/master/DirSearchClient/js/index.js。