【发布时间】:2020-07-01 01:22:10
【问题描述】:
我正在使用 Auth0 并像这样解析它的 idToken 服务器端:
var tokenHandler = new JwtSecurityTokenHandler();
var jwtToken = tokenHandler.ReadJwtToken(idToken); // idToken comes from client using auth0.js
var sub = jwtToken.Claims.First(claim => claim.Type == "sub").Value;
上面的代码运行良好,我能够成功解析idToken,但我想在信任它之前验证idToken,所以我试过这个:
string clientSecret = "{client_secret}"; // comes from Auth0 application's client secret
var validations = new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateIssuerSigningKey = true,
ValidIssuer = "some value", // used "iss" from here: https://jwt.io/
ValidAudience = "some value", // used "aud" from here: https://jwt.io/
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(clientSecret)),
};
var principal = tokenHandler.ValidateToken(idToken, validations, out var validatedToken);
在尝试验证令牌时,会导致以下异常:
Microsoft.IdentityModel.Tokens.SecurityTokenSignatureKeyNotFoundException
HResult=0x80131500
Message=IDX10501: Signature validation failed. Unable to match key:
kid: '[PII is hidden. For more details, see https://aka.ms/IdentityModel/PII.]'
我通过在此处解析其中一个标记来获取发行者和受众的价值:https://jwt.io/。客户端密码是我的应用程序在 Auth0 的客户端密码。
如何使用 JwtSecurityTokenHandler 验证 Auth0 的 idToken?
【问题讨论】:
-
@Nkosi 这正是我想要的。您可以发布该链接作为答案吗?我会把它标记为正确的。谢谢!
-
我建议添加您必须工作的内容作为自我回答,并参考该文章以帮助将来可能遇到此问题的其他人。
-
@JohnnyOshika - 如果你能更新你如何解决这个问题,我会很高兴据我了解,你应该找到一种方法来设置 Auth0 的“issuerSigningKey”,然后“ValidateIssuerSigningKey”应该可以工作
-
@TGN12 在下面查看我的答案...
标签: c# .net-core jwt token auth0