我正在尝试将旧的身份验证转换为.NET 2.0。我有以下代码:
app.UseJwtBearerAuthentication(new JwtBearerOptions
{
AutomaticAuthenticate = true,
IncludeErrorDetails = true,
Authority = "https://securetoken.google.com/xxxxx",
TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidIssuer = "https://securetoken.google.com/xxxxxx",
ValidateAudience = true,
ValidAudience = "xxxx",
ValidateLifetime = true,
},
});
我的新代码如下:
public void Configure(...)
{
...
app.UseAuthentication();
...
}
public void ConfigureServices(IServiceCollection services)
{
...
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(options =>
{
options.RequireHttpsMetadata = false;
options.IncludeErrorDetails = true;
options.Authority = "https://securetoken.google.com/xxxxxx";
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidIssuer = "https://securetoken.google.com/xxxxx",
ValidateAudience = true,
ValidAudience = "xxxxxx",
ValidateLifetime = true,
};
});
...
services.AddMvc();
services.AddAuthorization(......);
}
但是在2.0中我得到了404响应。如果我从端点中删除[Authorize]
属性,则可以正常工作。我的输出窗口显示了这个:
Microsoft.AspNetCore.Hosting.Internal.WebHost:信息:请求 启动HTTP / 1.1 GET http://localhost:62423/api/users/info
Microsoft.AspNetCore.Authorization.DefaultAuthorizationService:信息: 用户授权失败:(null)。 Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker:信息: 过滤器请求的授权失败 'Microsoft.AspNetCore.Mvc.Authorization.AuthorizeFilter'。 Microsoft.AspNetCore.Mvc.ChallengeResult:信息:正在执行 ChallengeResult与身份验证方案()。Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationHandler:信息: AuthenticationScheme:Identity.Application受到挑战。 Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker:信息: 执行的行动 SORTE.API.ContentManager.Controllers.UsersController.Info (SORTE.API.ContentManager)在24.0837ms Microsoft.AspNetCore.Hosting.Internal.WebHost:信息:请求 完成时间为35.2446ms 302 Microsoft.AspNetCore.Hosting.Internal.WebHost:信息:请求 启动HTTP / 1.1 GET http://localhost:62423/Account/Login?ReturnUrl=%2Fapi%2Fusers%2Finfo
Microsoft.AspNetCore.Hosting.Internal.WebHost:信息:请求 完成5.8149ms 404
从日志错误中,似乎它正在尝试将我重定向到/Account/Login
,但我没有这样的端点,我的项目是一个Web API。
我错过了一些配置吗?
答案 0 :(得分:3)
我遇到同样的问题,直到我读到this。
当我们使用Authorize属性时,它实际上默认绑定到第一个身份验证系统。
解决方案是指定使用的方案(JwtBearer):
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme, Policy = "PoliceName")]
现在我可以获得状态200(带有效令牌)和401(未经授权 - 无效令牌)