2014-09-05 44 views
15

Microsoft.IdentityModel.Tokens.JWT için bir referans alıyorum ve her şey yolunda gidiyordu.JwtSecurityTokenHandler ve TokenValidationParameters

Yeni System.IdentityModel.Tokens.Jwt numaralı telefonu kullandım, ancak hiç bir şey işe yaramıyor. JwtSecurityTokenHandler'un ValidateToken yöntemini bulamaz ve TokenValidationParameters, AllowedAudience, SigningToken veya ValidateExpiration özelliklerine sahip değildir.

Burada nelerin eksik? Bu konuda çalışan bir JWT doğrulama örneği olan herhangi biri var mı?

Benim "eski" kod: araştırma ve testlerin bir sürü sonra

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

cevap

29

, sonunda TokenValidationParameters için bazı özellikleri isimler değişti ve JwtSecurityTokenHandler.ValidateToken() yöntem imzası da tespit etmiştir.

İşte yukarıdaki kodun değiştirilmiş çalışma sürümü.

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

Ve başvuru için

, System.IdentityModel.Tokens ad alanında JwtSecurityTokenHandler yaşıyor. " JSON Web Token Handler For the Microsoft .Net Framework 4.5" paketini eklemeyi unutmayın (tez satırlarını yazdığım sırada 4.0.0 sürümü).

Bazılarınız için birkaç saatlik arama kaydedebiliriz!

+1

Bunun için teşekkürler! Ugh, çok sinir bozucu: \ ASP.NET'te kodlama, diğer çerçevelere kıyasla mutlak bir kabus oldu – ossys

+0

Sevindim yardım! –

+0

@ossys Belki de sadece Azure kısmı mı? ASP.NET'i bir süredir kullanıyor ve seviyoruz. Azure AD eşyalarını şimdi yapmalı ve arkada bir ağrı var. – Shelby115