Mat*_*att 2 identity asp.net-core
在向我的应用程序添加新的承载身份验证方面,我遇到了一些困难,我无法弄清楚,我需要的一段代码导致我的端点返回 404 错误,但删除后我能够成功访问没有 404 错误的端点,请参见下文。
首先,我的应用程序既充当身份服务器,又充当接受不记名令牌的 API。
services.AddAuthentication("Bearer")
.AddJwtBearer("Bearer", options =>
{
options.Authority = "https://www.example.com/";
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateAudience = false
};
});
services.AddAuthorization(options =>
{
options.AddPolicy("ApiScope", policy =>
{
policy.RequireAuthenticatedUser();
policy.RequireClaim("scope", "openid");
});
});
// THIS IS THE CODE CAUSING THE 404 ERROR
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<DevContext>();
Run Code Online (Sandbox Code Playgroud)
从上面来看,如果我尝试到达使用 [Authorize] 装饰的控制器端点,那么我会看到 404 响应。如果我注释掉最后几行(请参阅代码中的注释),那么我就能够成功到达我的端点。
为什么我会收到 404 错误?我认为这一定是因为 .AddIdentity 正在覆盖承载身份验证,并且因为我的控制器用 [Authorize] 装饰,所以我无法访问它?
难道我的应用程序不能同时作为 API 和身份服务器吗?
这是当有问题的代码被取消注释时(404 响应)我在输出日志中看到的内容:
Microsoft.AspNetCore.Hosting.Diagnostics: Information: Request starting HTTP/2.0 GET https://localhost:44310/api
Microsoft.AspNetCore.Authorization.DefaultAuthorizationService: Information: Authorization failed.
Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationHandler: Information: AuthenticationScheme: Identity.Application was challenged.
Microsoft.AspNetCore.Hosting.Diagnostics: Information: Request finished in 13.422ms 302
Microsoft.AspNetCore.Hosting.Diagnostics: Information: Request starting HTTP/2.0 GET https://localhost:44310/Account/Login?ReturnUrl=%2Fapi
Microsoft.AspNetCore.Hosting.Diagnostics: Information: Request finished in 2.0776ms 404
Run Code Online (Sandbox Code Playgroud)
这是我在评论有问题的代码时看到的(成功响应):
Microsoft.AspNetCore.Hosting.Diagnostics: Information: Request starting HTTP/2.0 GET https://localhost:44310/api
Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler: Information: Successfully validated the token.
Microsoft.AspNetCore.Authorization.DefaultAuthorizationService: Information: Authorization was successful.
Run Code Online (Sandbox Code Playgroud)
柯克·拉金 (Kirk Larkin) 的评论帮助解决了这个问题,总结一下:
AddIdentity必须放在调用之上AddAuthentication[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]| 归档时间: |
|
| 查看次数: |
868 次 |
| 最近记录: |