2016-02-29 94 views
2

我試圖做一個驗證json web令牌的概念驗證,在c#中是非對稱的。我目前正在嘗試用於Microsoft.NET庫的Json Web令牌處理程序,但我正在努力使其工作。文檔是有限的,大多數帖子在線發佈令牌或對稱驗證令牌。我可以對稱地使用使用this post中所述的通用JWT庫驗證令牌,但基於解碼函數的寫入方式,此處提供的解決方案無法處理不對稱驗證。在C#中驗證JWT不對稱#

這是我的工作代碼:

var jwtHandler = new JwtSecurityTokenHandler(); 

var certificate = new X509Certificate2(certpath, "password", X509KeyStorageFlags.Exportable); 
var privateKey = certificate.PrivateKey as RSACryptoServiceProvider; 
if (privateKey == null) 
{ 
    throw new Exception("Not an RSA private key"); 
} 
var cspBlob = privateKey.ExportCspBlob(true); 
var pk = Convert.ToBase64String(cspBlob); 

//This code also works instead of the above code, I believe 
//var privateKey = certificate.Export(X509ContentType.Pfx); 

var tokenValidationParameters = new TokenValidationParameters() 
{ 
    ValidAudience = "exampleAudience", 
    ValidIssuer = "exampleIssuer",      
    IssuerSigningToken = pk 
}; 

//The token passed in here is a string version of the token 
//I have tried both a JWTSecurityToken token and just a string version 
ClaimsPrincipal claimsPrincipal = jwtHandler.ValidateToken(asymmetricToken, tokenValidationParameters); 
if (claimsPrincipal != null) 
{ 
    // Valid 
    Console.Write("Valid!"); 
} 

我得到了幾個錯誤,即在tokenValidationParameters部分和驗證令牌的方法。我只是不確定這些功能如何與我的場景相關。我需要設置哪些驗證參數?另外,我在msdn page上看到有一個重載的方法需要一個令牌和驗證參數,但是我收到一個編譯錯誤,指出沒有任何版本的此方法需要2個參數。

最後,有誰知道這段代碼是否可以用於非對稱驗證,還是JWTHandler上的ValidateToken方法僅用於對稱驗證?

任何幫助都將不勝感激。謝謝。

回答

2

我找到了我的問題的解決方案,只是想分享。我最終使用了用於對稱驗證的JWT庫。我偶然發現this issue,發現它們分支了這個庫,幷包含了用於不對稱驗證的代碼。執行代碼可以在here找到。

我用來導入我的.pfx證書和驗證令牌代碼:

var certificate = new X509Certificate2(certpath, "password", X509KeyStorageFlags.Exportable); 
var privateKey = certificate.Export(X509ContentType.Pfx); 

string payload = JWT.Decode(tokenString, privateKey); 
+2

在非對稱情況下,不JWTs簽名使用公共密鑰驗證?我有點困惑爲什麼代碼示例將privateKey傳遞給解碼方法? – r590

+0

我有同樣的問題。生成JWT的認證服務器擁有私鑰。這個JWT將被用來調用另一個應用程序服務器,公鑰可以被放置到應用程序服務器並驗證這個JWT? –