我希望有人能帮上忙:
我有一个使用Azure AD承载身份验证保护的web api,其中我有两个web客户端,它们可以使用AD中的承载令牌在web api上成功地进行身份验证。web api和两个web应用程序都配置为AD中的应用程序。我曾尝试使用ADAL for Cordova访问web api iOS/Android应用程序,但它返回401。
ClaimsPrincipal.Current.Identity.IsAuthenticated
返回false。
我正在使用在Azure AD中安装的本机应用程序的客户端id,并且我正在接收令牌,但此令牌无效。在我解析了jwt.io上的令牌后,一切似乎都是正确的,但我注意到令牌没有头部。我添加了访问WebApi的权限,并以用户身份登录和访问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
}
});
}
有人能帮忙吗?
感谢
您似乎向API发送了错误的令牌-您应该发送result.accessToken。请参阅https://github.com/Azure-Samples/active-directory-cordova-multitarget/blob/master/DirSearchClient/js/index.js例如。