【发布时间】:2017-11-25 00:49:39
【问题描述】:
我有一个应用程序,它在前端使用 React,在后端使用 asp.net core 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 控制器时(使用不记名令牌传递授权标头),我收到以下错误:
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(字符串令牌,TokenValidationParameters 验证参数) 在 System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.ValidateToken(字符串令牌,TokenValidationParameters 验证参数,SecurityToken 和验证令牌) 在 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 被质询。
【问题讨论】:
-
您能否提供指向您所指的@Saca 答案的链接,或者如果将其删除,请简要解释他的答案?我遇到了完全相同的问题...
-
他好像删除了评论。不幸的是,我无法再访问代码了。但我很乐意为您提供帮助,请通过 twitter @thdotnet 联系我
标签: asp.net-core jwt azure-active-directory adal asp.net-core-webapi