web-dev-qa-db-ja.com

JwtSecurityTokenHandlerおよびTokenValidationParameters

以前はMicrosoft.IdentityModel.Tokens.JWTへの参照がありましたが、すべて正常に機能していました。

新しいSystem.IdentityModel.Tokens.Jwtを使用するように更新しましたが、現在は何も機能していないようです。 ValidateTokenJwtSecurityTokenHandlerメソッドとTokenValidationParametersにはAllowedAudienceSigningToken、またはValidateExpirationプロパティがありません。

ここに何が欠けていますか?誰でもこれでJWT検証の実用的なサンプルを提供できますか?

私の「古い」コード:

private static void ValidateJwt(string jwt)
{
    var handler = new JWTSecurityTokenHandler();
    var validationParameters = new Microsoft.IdentityModel.Tokens.JWT.TokenValidationParameters()
    {
        AllowedAudience = "https://my-rp.com",
        //SigningToken = new BinarySecretSecurityToken(Convert.FromBase64String(myBase64Key)),
        SigningToken = new X509SecurityToken(
           X509
           .LocalMachine
           .My
           .Thumbprint
           .Find("UYTUYTVV99999999999YTYYTYTY88888888", false)
           .First()),
        ValidIssuer = "https://my-issuer.com/trust/issuer",
        ValidateExpiration = true
    };

    try
    {
        var principal = handler.ValidateToken(jwt, validationParameters);
    }
    catch (Exception e)
    {

        Console.WriteLine("{0}\n {1}", e.Message, e.StackTrace);
    }

    Console.WriteLine();
}
19
Patrice Cote

多くの調査とテストの結果、TokenValidationParametersのいくつかのプロパティ名が変更され、JwtSecurityTokenHandler.ValidateToken()メソッドのシグネチャも変更されたことがわかりました。

これが、上記のコードの修正された作業バージョンです。

private static void ValidateJwt(string jwt)
{
    var handler = new JwtSecurityTokenHandler();   
    var validationParameters = new TokenValidationParameters()
    {
        ValidAudience = "https://my-rp.com",
        IssuerSigningTokens = new List<X509SecurityToken>() { new X509SecurityToken(
           X509
           .LocalMachine
           .My
           .Thumbprint
           .Find("UYTUYTVV99999999999YTYYTYTY88888888", false)
           .First()) },
        ValidIssuer = "https://my-issuer.com/trust/issuer",
        CertificateValidator = X509CertificateValidator.None,
        RequireExpirationTime = true
    };

    try
    {
        SecurityToken validatedToken;
        var principal = handler.ValidateToken(jwt, validationParameters, out validatedToken);
    }
    catch (Exception e)
    {

        Console.WriteLine("{0}\n {1}", e.Message, e.StackTrace);
    }

    Console.WriteLine();
}

また、参照用に、JwtSecurityTokenHandlerSystem.IdentityModel.Tokens名前空間。パッケージを追加することを忘れないでください Microsoft .Net Framework 4.5のJSON Web Token Handler "(これらの行を書いている時点でのバージョン4.0.0)。

一部のユーザーの検索に数時間かかることを願っています!

36
Patrice Cote