首页 > 解决方案 > 使用 AddJwtBearer() 使用令牌 - 无法验证签名

问题描述

我已经尝试了几天在我的 .net core 2.1 Web 服务中使用 jwt 令牌。令牌被SecurityTokenInvalidSignatureException: IDX10503: Signature validation failed.-exception 拒绝。

我的设置很简单:

        services
            .AddAuthentication(JwtBearerDefaults.AuthenticationScheme)                
            .AddJwtBearer(configureOptions => { 
                configureOptions.ClaimsIssuer = "http://localhost/";
                configureOptions.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuerSigningKey = true,
                    IssuerSigningKey = new SymmetricSecurityKey(Convert.FromBase64String("zeey+h0M8mvWSR9HYKlNns+....")),

                    ValidateIssuer = true,
                    ValidIssuer = "http://localhost/",

                    ValidateAudience = true,
                    ValidAudience = "efb4f12d020b434c9b531af96263b3fa",
                };
            });

将收到的令牌放入https://jwt.io/,发现签名有效:

在此处输入图像描述

但我的网络服务仍然拒绝承认令牌。

我究竟做错了什么?

标签: c#.netasp.net-corejwt

解决方案


我终于找到了我的问题的答案:

  1. 我的钥匙错了。但即使使用正确的密钥,我仍然得到同样的错误......

  2. 在构建 时SymmetricSecurityKey,我不得不使用Encoding.Unicode.GetBytes(...)代替Encoding.ASCIIor Encoding.UTF8

  3. 我仍然在使用 jwt.io 时遇到问题。我猜这个网站不再是验证令牌的好地方。


推荐阅读