我创建了一个示例应用程序,用户可以通过Azure B2C进行身份验证,这很好。我收到了Token和AuthenticationResult的返回,两者都没问题。但是我想要从令牌中获取ClaimPrincipal。为此,我已将System.IdentityModel.Tokens.Jwt(5.4.0)nuget包添加到项目中。
使用以下代码来实现:
但每次执行ValidateToken时,它都会抛出以下异常:
使用以下代码来实现:
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 应用程序中使用。