BearerOption.SaveToken 没有在服务器中保存令牌
BearerOption.SaveToken is not saving the token in the server
我使用的是 .net Core Web API 3.1.2 框架,在配置中,我添加了以下代码:
services.AddAuthentication(opt =>
{
opt.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
opt.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
}).
AddJwtBearer(opt =>
{
**opt.SaveToken = true;**
opt.TokenValidationParameters = new TokenValidationParameters()
{
IssuerSigningKey = new SymmetricSecurityKey(_jwtSigningKey),
ValidateAudience = false,
ValidateIssuer = false,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
};
});
逻辑上,opt.SaveToken = true 会将令牌保存在服务器中,并且身份验证方法不应接受从任何其他服务器发出的任何令牌,即使其他服务器使用完全相同的 JWT 签名也是如此密钥,因为它没有保存在服务器上。
我进行了测试,并将相同的签名密钥上传到 2 个不同的服务器,并从一个服务器获得了登录令牌,并用它在另一台服务器上进行了身份验证,另一台服务器接受了该令牌,即使它没有保存令牌,此外,我不小心添加了一个随机的唯一字符串生成值以包含在令牌中,因此 2 个令牌不可能相同。
为什么会这样?
我在这里缺少什么?
仅设置 SaveToken = true 意味着您可以通过 await HttpContext.GetTokenAsync("access_token") 访问它以用于任何传出请求。与认证没有任何联系,但可以轻松实现。
我使用的是 .net Core Web API 3.1.2 框架,在配置中,我添加了以下代码:
services.AddAuthentication(opt =>
{
opt.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
opt.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
}).
AddJwtBearer(opt =>
{
**opt.SaveToken = true;**
opt.TokenValidationParameters = new TokenValidationParameters()
{
IssuerSigningKey = new SymmetricSecurityKey(_jwtSigningKey),
ValidateAudience = false,
ValidateIssuer = false,
ValidateLifetime = true,
ValidateIssuerSigningKey = true,
};
});
逻辑上,opt.SaveToken = true 会将令牌保存在服务器中,并且身份验证方法不应接受从任何其他服务器发出的任何令牌,即使其他服务器使用完全相同的 JWT 签名也是如此密钥,因为它没有保存在服务器上。
我进行了测试,并将相同的签名密钥上传到 2 个不同的服务器,并从一个服务器获得了登录令牌,并用它在另一台服务器上进行了身份验证,另一台服务器接受了该令牌,即使它没有保存令牌,此外,我不小心添加了一个随机的唯一字符串生成值以包含在令牌中,因此 2 个令牌不可能相同。
为什么会这样? 我在这里缺少什么?
仅设置 SaveToken = true 意味着您可以通过 await HttpContext.GetTokenAsync("access_token") 访问它以用于任何传出请求。与认证没有任何联系,但可以轻松实现。