JWT 鉴权的问题,一直返回401 Console.Write();打印出来为invalid_token,但是我验证这个Token好像是没问题的,然而我通过swagger测试不行,
麻烦大手子们看下是我哪里配置有问题吗
下面贴代码
///
/// 获取 Token
///
/// <param name="userName">用户名</param>
/// <param name="password">密码</param>
/// <returns></returns>
public string GetToken(string userName, string password)
{
#region 有效载荷
var claims = new[] {
new Claim(ClaimTypes.Name, userName),
new Claim("NickName",userName),
new Claim(ClaimTypes.Role,"Administrator"),
new Claim("Role","Assient"),
};
#endregion
SymmetricSecurityKey key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_option.CurrentValue.SecurityKey!));
SigningCredentials signingCredentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
JwtSecurityToken token = new JwtSecurityToken(
issuer: _option.CurrentValue.Issuer!,
audience: _option.CurrentValue.Audience!,
claims: claims,
expires: DateTime.Now.AddMinutes(60),
notBefore: DateTime.Now,
signingCredentials: signingCredentials);
string returnToken = new JwtSecurityTokenHandler().WriteToken(token);
return returnToken;
}
#region JWT配置鉴权
JWTTokenOption tokenOption = new JWTTokenOption();
builder.Configuration.Bind("JWTTokenOption", tokenOption);
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(option =>
{
option.TokenValidationParameters = new TokenValidationParameters()
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
ValidAudience = tokenOption.Audience,
ValidIssuer = tokenOption.Issuer,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(tokenOption.SecurityKey!))
};
option.Events = new JwtBearerEvents
{
//此处为权限验证失败后触发的事件
OnChallenge = context =>
{
Console.Write(context.Error);
context.HandleResponse();
//自定义自己想要返回的数据结果
var payload = "{\"Success\":false,\"Msg\":\"很抱歉,您无权访问该接口\",\"StatusCode\":401}";
context.Response.ContentType = "application/json";
context.Response.StatusCode = 200;
//输出Json数据结果
context.Response.WriteAsync(payload);
return Task.FromResult(0);
}
};
});
#endregion
//以上信息都是读取的appsettin的数据,调试都是有值的
"JWTTokenOption": {
"Audience": "22333",
"Issuer": "22333",
"SecurityKey": "12333456677655ffrrffff"
}