Я пытаюсь сделать нечеткое доказательство концепции, которая проверяет токен json-сети в C#. В настоящее время я пытаюсь использовать Json Web Token Handler для библиотеки Microsoft.NET, но я изо всех сил пытаюсь заставить его работать. Документация ограничена, и большинство сообщений в Интернете либо выдают токены, либо проверяют токены симметрично. Я смог симметрично проверить токен с использованием общей библиотеки JWT, как описано в this post, но предоставленное там решение не обрабатывает асимметричную проверку, основанную на способе написания функции декодирования.Проверка JWT асимметрично в C#
Вот код, я работаю с:
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 и лексемы метода Validate. Я просто не знаю, как эти функции работают в отношении моего сценария. Какие параметры проверки необходимо установить? Кроме того, я вижу на msdn page, что есть перегруженный метод, который принимает параметры маркера и проверки, но я получаю ошибку компиляции, указывающую, что ни одна версия этого метода не принимает 2 параметра.
Наконец, кто-нибудь знает, действительно ли этот код будет работать для асимметричной проверки, или метод ValidateToken на JWTHandler работает только для симметричной проверки?
Любая помощь вообще будет оценена по достоинству. Благодарю.
В асимметричных сценариях не является JWTs подписи подтверждена с помощью открытого ключа? Я немного смущен, почему образец кода передает privateKey в метод Decode? – r590
У меня такой же вопрос. сервер аутентификации, сгенерированный JWT, владеет частным ключом. И этот JWT будет использоваться для вызова другого сервера приложений, может ли публичный ключ быть размещен на сервере приложений и для проверки этого JWT? –