由Azure Active Directory v1保护的asp.net核心webapi

时间:2017-06-21 23:06:14

标签: asp.net-core jwt azure-active-directory adal asp.net-core-webapi

我有一个应用程序在前端使用React,在后端使用asp.net核心webapi。

为了保护前端,我正在使用adal.js并且它工作正常。我可以获得令牌和我需要的所有信息。

问题是我想将令牌传递给webapi,它应该允许或阻止请求。在过去,nuget Microsoft.Owin.Security.ActiveDirectory效果很好,但现在似乎我应该使用Microsoft.AspNetCore.Authentication.JwtBearer并且情况有所不同。

我在经典Azure门户中设置了客户端/ api应用程序,并且还授予访问api以验证客户端令牌的权限。

这是我的Startup.cs的样子:

        app.UseJwtBearerAuthentication(new JwtBearerOptions
        {
            AutomaticAuthenticate = true,
            AutomaticChallenge = true,
            Authority = ConfigurationManager.AppSettings["ida:AADInstance"] + ConfigurationManager.AppSettings["ida:TenantId"],
            Audience = ConfigurationManager.AppSettings["ida:Audience"],
        });

当我尝试使用[Authorize]属性访问webapi控制器(使用持有者令牌传递Authorization标头)时,我收到以下错误:

Microsoft.AspNetCore.Hosting.Internal.WebHost:信息:请求启动HTTP / 1.1 POST http://localhost:44304/api/v1/Temp 0 Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerMiddleware:信息:无法验证令牌eyJ0eXAiOiJK ...

Microsoft.IdentityModel.Tokens.SecurityTokenInvalidSignatureException:IDX10500:签名验证失败。没有提供安全密钥来验证签名。    在System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.ValidateSignature(String token,TokenValidationParameters validationParameters)    在System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.ValidateToken(String token,TokenValidationParameters validationParameters,SecurityToken& validatedToken)    在Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler.d__1.MoveNext()

我尝试了所有不同的设置,但似乎都没有。我发现的资源与Azure AD B2C或Azure AD v2端点有关,因为adal.js我仍在使用“经典”,我找不到任何可以帮助我的东西。

任何线索?提前谢谢。

PS:由于我还在开发,SSL证书无效。我不确定它是否与此错误有关。

更新

在实施@Saca答案后,我现在收到以下错误:

Microsoft.AspNetCore.Authorization.DefaultAuthorizationService:信息:用户授权失败:(null)。 Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker:信息:过滤器“Microsoft.AspNetCore.Mvc.Authorization.AuthorizeFilter”上的请求授权失败。 Microsoft.AspNetCore.Mvc.ChallengeResult:信息:使用身份验证方案执行ChallengeResult()。 Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerMiddleware:信息:AuthenticationScheme:Bearer受到挑战。

1 个答案:

答案 0 :(得分:2)

经过一整个下午尝试这里的事情就是解决方案:

在我的Startup.cs中我在app.UseCors(CorsPolicy);

之前设置了AD

我只是切换,现在它工作正常。