【问题标题】:How to validate JWT Token using JWKS in Dot Net Core如何在 Dot Net Core 中使用 JWKS 验证 JWT 令牌
【发布时间】:2020-02-24 08:19:03
【问题描述】:

在 C# 中,我需要根据 JWKS(代表下面的一组键的 Json 对象)验证承载令牌

{ 
   "keys":[ 
      { 
         "e":"AQAB",
         "kid":"unique key",
         "kty":"RSA",
         "n":"some value"
      }
   ]
}

【问题讨论】:

    标签: validation authentication jwt token jwk


    【解决方案1】:

    您可以使用 Microsoft 的 Nuget 包 Microsoft.IdentityModel.TokensSystem.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 有相同问题的其他人 - 请参阅stackoverflow.com/a/64274938/419934,它向您展示了如何将密钥列表转换为正确的格式,然后可用于在 TokenValidationParameters 字段中设置 IssuerSigningKeys .
    猜你喜欢
    • 2021-06-27
    • 2020-01-20
    • 1970-01-01
    • 2020-08-22
    • 1970-01-01
    • 2017-11-05
    • 2020-09-04
    • 2019-12-03
    • 2021-09-01
    相关资源
    最近更新 更多