我試圖做一個驗證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方法僅用於對稱驗證?
任何幫助都將不勝感激。謝謝。
在非對稱情況下,不JWTs簽名使用公共密鑰驗證?我有點困惑爲什麼代碼示例將privateKey傳遞給解碼方法? – r590
我有同樣的問題。生成JWT的認證服務器擁有私鑰。這個JWT將被用來調用另一個應用程序服務器,公鑰可以被放置到應用程序服務器並驗證這個JWT? –