使用新的AddJwtBearer时,我无法使任何样本生效。我有一个归属于授权的HomeController:
[Authorize]
public class HomeController : Controller
{
public IActionResult Index()
{
return View();
}
}
我正在尝试使用新的ASP.NET Core AddJwtBearer,我在的服务.AddMvc()之前在ConfigureServices中有这个代码:
services.AddAuthentication(opts =>
{
opts.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
opts.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
opts.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(opts =>
{
opts.RequireHttpsMetadata = false;
opts.SaveToken = true;
opts.TokenValidationParameters = new TokenValidationParameters()
{
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("mysupersecretkey")),
ValidIssuer = "issuer,
ValidAudience = "audience",
ValidateIssuerSigningKey = true,
ValidateLifetime = true,
};
});
在Startup中的Configure方法中,我在app.UseMvc()
之前就已经有了这个app.UseAuthentication();
我原本希望它重定向到Login页面(没有Authorize属性)所以我可以输入用户名和密码,然后创建一个令牌以便成功使用,但我总是被重定向到空白页面。
我尝试使用邮递员导航Home / Index,正文是空的,标题中有:
WWW-Authenticate →Bearer error="invalid_token", error_description="The token is expired"
如果我使用Cookie身份验证,则会重定向到“登录”页面。在之前的版本(UseJwtBearerAuthentication)中,重定向允许我输入密码并获取令牌。
我是否期待错误的行为,或者我错过了什么?
答案 0 :(得分:2)
我认为你期待错误的行为。 JWT承载令牌主要用于调用API。对于使用例如调用您的API的其他应用来说,它不是非常有用HttpClient获取重定向作为响应。 401挑战直接告诉呼叫者他们需要进行身份验证。
如果你有使用这个API的前端JavaScript,你应该在那里添加401状态代码的检查,并从客户端重定向到登录页面。
它设置401状态代码并返回正确的错误。
虽然看着代码,但我猜你可以通过使用OnChallenge
事件从服务器端进行重定向。就个人而言,我不会将API重定向到登录页面。