IDX10501: 签名验证失败。kid: '[PII已隐藏]', token: '[PII已隐藏]' - Azure B2C

8
我创建了一个示例应用程序,用户可以通过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 core 控制台应用程序,但最终这段代码将在一个 WPF 应用程序中使用。


1
你的权限可能有误,请检查你的Fiddler。 https://dev59.com/gqDia4cB1Zd3GeqPH7bX - Marilee Turscak - MSFT
1个回答

13
当您设置以下标志时,您可以获得更详细的错误信息。这将用实际错误替换[PII已隐藏](也称为:个人可识别信息)。只是在生产代码中不要保留它这样!
IdentityModelEventSource.ShowPII = true;

3
那个标志应该放在哪里?不是在“TokenValidationParameters”中。 - Eivind Gussiås Løkseth
@eivind,你可以在你的main()函数中设置这个。但是在生产代码中应该将其删除,这个标志只应该用于调试。 - Carlo Bos
你可能需要添加 using Microsoft.IdentityModel.Logging; - DharmaTurtle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接