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 个令牌不可能相同。

为什么会这样? 我在这里缺少什么?

我仔细检查了源代码: https://github.com/aspnet/Security/blob/d1ee5a22fbda54fc2352d937d7064b451a95b72a/src/Microsoft.AspNetCore.Authentication.JwtBearer/JwtBearerHandler.cs

官方手册: https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.authentication.jwtbearer.jwtbeareroptions.savetoken?view=aspnetcore-3.0

仅设置 SaveToken = true 意味着您可以通过 await HttpContext.GetTokenAsync("access_token") 访问它以用于任何传出请求。与认证没有任何联系,但可以轻松实现。