来自ADAL for Cordova的令牌请求返回来自Web Api的401响应

时间:2015-12-11 14:28:49

标签: asp.net-web-api azure-active-directory adal

我希望有人可以帮忙解决这个问题:

我有一个使用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 } }); }

有人可以帮忙吗?

由于

1 个答案:

答案 0 :(得分:1)

您似乎向API发送了错误的令牌 - 您应该发送result.accessToken。有关示例,请参阅https://github.com/Azure-Samples/active-directory-cordova-multitarget/blob/master/DirSearchClient/js/index.js