如何在 Dot Net Core 中使用 JWKS 验证 JWT 令牌
Posted
技术标签:
【中文标题】如何在 Dot Net Core 中使用 JWKS 验证 JWT 令牌【英文标题】:How to validate JWT Token using JWKS in Dot Net Core 【发布时间】:2020-02-24 08:19:03 【问题描述】:在 C# 中,我需要根据 JWKS(代表下面的一组键的 Json 对象)验证承载令牌
"keys":[
"e":"AQAB",
"kid":"unique key",
"kty":"RSA",
"n":"some value"
]
【问题讨论】:
【参考方案1】:您可以使用 Microsoft 的 Nuget 包 Microsoft.IdentityModel.Tokens
和 System.IdentityModel.Tokens.Jwt
来做到这一点
使用以下代码创建令牌验证器:
private static bool ValidateToken(string token, TokenValidationParameters validationParameters)
var tokenHandler = new JwtSecurityTokenHandler();
try
tokenHandler.ValidateToken(token, validationParameters, out var validatedToken);
return validatedToken != null;
catch (Exception)
return false;
为了使用,您必须加载 JWKS 并选择验证参数的键:
var jwksJson = @"
""keys"":[
""e"":""AQAB"",
""kid"":""unique key"",
""kty"":""RSA"",
""n"":""some value""
]
";
var token = "eyJhb...";
var jwks = new JsonWebKeySet(jwksJson);
var jwk = jwks.Keys.First();
var validationParameters = new TokenValidationParameters
IssuerSigningKey = jwk,
ValidAudience = "", // Your API Audience, can be disabled via ValidateAudience = false
ValidIssuer = "" // Your token issuer, can be disabled via ValidateIssuer = false
;
var isValid = ValidateToken(token, validationParameters);
【讨论】:
如果您不想使用第一个键怎么办 - 如果您想检查其中是否有任何一个被孩子匹配怎么办? @th3morg 您可以创建多个TokenValidationParameters
并验证它们中的每一个,或者您可以通过KeyId
属性选择JsonWebKey
。
仅适用于与@th3morg 有相同问题的其他人 - 请参阅***.com/a/64274938/419934,它向您展示了如何将密钥列表转换为正确的格式,然后可用于在 TokenValidationParameters 字段中设置 IssuerSigningKeys .以上是关于如何在 Dot Net Core 中使用 JWKS 验证 JWT 令牌的主要内容,如果未能解决你的问题,请参考以下文章
如何使用jquery从dot net core mvc中的表中的下拉列表中显示选定的值
如何使用WEB API Dot net core实现文件上传?
Angular + core 如何将文件数组从 Angular 上传到 Dot Net Core
使用自包含框架时,dot net core 3.1 的设置 CI 构建配置失败
AWS Lambda Dot Net Core 3.1 在使用 Aspose Cells for .Net 时抛出 gdip 异常