JWT 令牌身份验证失败并显示消息“PII 已隐藏”

Posted

技术标签:

【中文标题】JWT 令牌身份验证失败并显示消息“PII 已隐藏”【英文标题】:JWT token authentication fails with message "PII is hidden" 【发布时间】:2019-08-13 11:26:26 【问题描述】:

在我的 .net core 2.2 微服务中,我尝试从 JWT 令牌中提取声明以进行一些授权。身份验证是在系统的另一部分完成的,所以我现在不需要这样做。

我在 Startup.cs 中使用此代码:

  services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
            .AddJwtBearer(options =>
            
                var signingKey = Encoding.UTF8.GetBytes("SECRET_KEY");
                options.TokenValidationParameters = new TokenValidationParameters
                
                    ValidateIssuer = false,
                    ValidateAudience = false,
                    IssuerSigningKey = new SymmetricSecurityKey(signingKey)
                ;
            );

在控制器上我有这个代码:

    [Authorize]
    [HttpPost]
    public async Task<ActionResult<CreateResponse>> Create()
    
        var userIdClaim = HttpContext.User.Claims.Where(x => x.Type == "empId").SingleOrDefault();
        return Ok($"Your User ID is userIdClaim.Value and you can create invoices!");
    

我总是收到此错误消息和“未经授权”的响应:

Microsoft.IdentityModel.Tokens.SecurityTokenInvalidSignatureException:IDX10503:签名验证失败。尝试的键:'[PII 被隐藏]'。 捕获的异常: '[PII 被隐藏]'。 token: '[PII is hidden]'.

【问题讨论】:

签名验证失败。确保签名密钥正确。 JWT SecurityTokenInvalidSignatureException using RS256 PII is hidden的可能重复 也适用于 aspnet core 3.1 【参考方案1】:

在 Startup 类的 Configure() 中添加如下代码可以看到开发中隐藏的细节:

if (env.IsDevelopment())

     IdentityModelEventSource.ShowPII = true; 

收到完整消息后,请检查所使用的密钥对于令牌是否正确。

【讨论】:

@Oofpez 这对我来说适用于 2.2,你有它不工作的例子吗? @Oofpez 文档建议它适用于最新版本 docs.microsoft.com/en-us/dotnet/api/… 我可以确认这也适用于 2.2,同时确保您拥有 using Microsoft.IdentityModel.Logging;

以上是关于JWT 令牌身份验证失败并显示消息“PII 已隐藏”的主要内容,如果未能解决你的问题,请参考以下文章

使用 SignalR 的 JWT 身份验证失败

Axios - 防止在外部 api 调用上发送 JWT 令牌

无法读取未定义的 reactjs JWT 身份验证的属性“令牌”

为啥验证函数中的令牌参数在 jwt 身份验证中显示错误?

在刷新身份验证令牌时处理多个未经授权的请求

Laravel JWT 身份验证