【问题标题】:IDX10501: Signature validation failed. kid: '[PII is hidden]', token: '[PII is hidden]' - Azure B2CIDX10501:签名验证失败。孩子:'[PII 已隐藏]',令牌:'[PII 已隐藏]' - Azure B2C
【发布时间】:2019-09-15 00:07:33
【问题描述】:

我创建了一个示例应用程序,用户可以在其中使用 Azure B2C 进行身份验证,效果很好。我取回了 Token 和 AuthenticationResult。两者都可以。但我想从令牌中取回 ClaimPrincipal。为此,我已将 System.IdentityModel.Tokens.Jwt (5.4.0) nuget 包添加到项目中。

我尝试使用以下代码来实现:

string Token = "eyJ0eXAiOiJKV1QiLCJhbGciO*****"; //long token
JwtSecurityTokenHandler jwt = new JwtSecurityTokenHandler();

var validateParams = new Microsoft.IdentityModel.Tokens.TokenValidationParameters()
        {
          ValidIssuer = Authority, //https://login.microsoftonline.com/tfp/MYTEANANTNAME.onmicrosoft.com/MYPOLICYNAME/v2.0/" 
          ValidAudience = clientId,  //CLIENTID: Like: b430xxxx-xxxx-xxxx-xxxx-f5c33cxxxxxx
          ValidateAudience = true,
          ValidateLifetime = true,
          ValidateIssuer = true,
        };

SecurityToken secToken;
var claimPrincipal = jwt.ValidateToken(Token, validateParams , out secToken);

但是当 ValidateToken 被击中时,它总是抛出以下异常:

IDX10501: Signature validation failed. Unable to match keys: 
kid: '[PII is hidden]', 
token: '[PII is hidden]'.

你对我应该如何解决这个问题有什么建议吗?

在这种情况下,应用程序是一个 .net 核心控制台应用程序,但最终此代码将在 WPF 应用程序中。

【问题讨论】:

标签: c# .net-core jwt azure-ad-b2c


【解决方案1】:

当您设置以下标志时,您可以获得更详细的错误。这将用实际错误替换 [PII is hidden](又名:个人身份信息)。

IdentityModelEventSource.ShowPII = true;

【讨论】:

  • 该标志应该设置在哪里?不在TokenValidationParameters。
  • @eivind 你可以在你的 main() 函数中设置它。你应该为生产代码删除它,这个标志应该只用于调试。
  • 您可能需要添加using Microsoft.IdentityModel.Logging;
猜你喜欢
  • 2018-12-15
  • 2019-08-13
  • 2020-04-22
  • 2021-11-10
  • 2017-09-02
  • 2021-09-28
  • 1970-01-01
  • 2020-12-28
  • 1970-01-01
相关资源
最近更新 更多