我一直在尝试将“ PwdLess”实现为ASP.Net Core 2.2应用程序的一种简单的无密码身份验证机制。它通过Authorization: Bearer <token>
传递了JWT,从而成功生成了我要在我的应用程序的后端API上使用的JWT。
在我的Startup.ConfigureServices方法中,我有以下代码:
// JWT authentication
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, options =>
{
options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidIssuer = "MYISSUERSTRINGHERE"
ValidAudience = "MYAUDIENCESTRINGHERE"
IssuerSigningKey = new SymmetricSecurityKey(
Encoding.UTF8.GetBytes("MYSECRETHERE"))
};
});
// ASP.NET Core MVC
services.AddMvc();
在控制器中,在我要授权访问的方法上,我具有:
[Authorize]
public IActionResult SomeMethod()
{
}
这将抛出401,这令人感到困惑……甚至更是如此,因为如果我改为在控制器中使用以下代码,则一切都会按预期进行:
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
public IActionResult ValidateToken()
{
}
我不明白我在Startup.ConfigureServices中缺少什么,这使我的Authorize属性上的AuthenticationSchemes值必不可少!
请您能说明我的错误吗?
答案 0 :(得分:1)
根据以上注释,除了身份验证服务外,我们还需要在Authentication
之前启用UseMvc()
中间件(以及其他任何要访问HttpContext.User
的中间件):
app.UseAuthentication();
app.UseMvc();