2014-09-05 12 views
15

Tôi đã từng tham chiếu đến Microsoft.IdentityModel.Tokens.JWT và mọi thứ đều hoạt động tốt.JwtSecurityTokenHandler và TokenValidationParameters

Tôi đã cập nhật để sử dụng System.IdentityModel.Tokens.Jwt mới nhưng hiện tại không có gì hoạt động. Không thể tìm thấy phương thức ValidateToken của JwtSecurityTokenHandlerTokenValidationParameters không có các thuộc tính AllowedAudience, SigningToken hoặc ValidateExpiration.

Tôi thiếu gì ở đây? Bất cứ ai có thể cung cấp một mẫu làm việc của một xác nhận JWT với điều này?

My mã "cũ":

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(); 
} 

Trả lời

29

Sau rất nhiều nghiên cứu và thử nghiệm, cuối cùng tôi phát hiện ra rằng một số tên thuộc tính cho TokenValidationParameters đã thay đổi và JwtSecurityTokenHandler.ValidateToken() phương pháp chữ ký quá.

Vì vậy, đây là phiên bản làm việc đã sửa đổi của mã ở trên.

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(); 
} 

Và đối với những tài liệu tham khảo, các JwtSecurityTokenHandler cuộc sống trong không gian tên System.IdentityModel.Tokens. Đừng quên để thêm các gói "JSON Web Token Handler For the Microsoft .Net Framework 4.5" (phiên bản 4.0.0 tại thời điểm tôi viết dòng đề tài).

Hy vọng nó có thể tiết kiệm một vài giờ tìm kiếm cho một số bạn!

+1

Cảm ơn vì điều này! Ugh, rất bực bội: \ Mã hóa trong ASP.NET đã là một cơn ác mộng tuyệt đối so với các khung công tác khác ngoài kia – ossys

+0

Rất vui khi được! –

+0

@ossys Có lẽ nó chỉ là phần Azure? Được sử dụng ASP.NET trong một thời gian và thích nó. Phải làm công cụ Azure AD bây giờ và đó là một cơn đau ở phía sau. – Shelby115

Các vấn đề liên quan