Подписание JWT не работает: произошло исключение типа System.MethodAccessException.C#

Место общения программистов C#
Ответить
Anonymous
 Подписание JWT не работает: произошло исключение типа System.MethodAccessException.

Сообщение Anonymous »

Я пытаюсь подписать JWT с помощью ключа, который хранится в Azure Keyvault, используя хранилище ключей в качестве подписывающего лица, таким образом, чтобы фактическая частная часть ключа никогда не покидала хранилище ключей.
Я придумал следующий код:

Код: Выделить всё

var keyClient = new KeyClient(new Uri("https://myvault.vault.azure.net/"), new ClientSecretCredential("ad_here", "client_id_here", "secret_here"));
var k = keyClient.GetKey("RSA-4096-Key-Name-Here"); // THIS WORKS! the key can be retrieved

var cryptoFactory = new CryptoProviderFactory()
{
CustomCryptoProvider = new KeyVaultCryptoProvider()
};

KeyVaultSecurityKey.AuthenticationCallback authenticationCallback = async (authority, resource, scope) =>
{
var credential = new ClientSecretCredential("ad_here", "client_id_here", "secret_here");
var tokenRequestContext = new Azure.Core.TokenRequestContext(new[] { resource + "/.default" });
var accessToken = await credential.GetTokenAsync(tokenRequestContext);
return accessToken.Token;
};

var signingKey = new KeyVaultSecurityKey("https://myvaultvault.azure.net/keys/RSA-4096-Key-Name-Here/version-here", authenticationCallback);
signingKey.CryptoProviderFactory = cryptoFactory;

_signingCredentials = new SigningCredentials(signingKey, SecurityAlgorithms.RsaSha256);

var accessTokenClaims = new Dictionary
{
{ "sub", Guid.NewGuid().ToString() },
{ "cpf", request.Username },
{ "email", request.Email },
{ "mobile_number", request.MobileNumber }
};

/****** ERROR HAPPENS HERE ********/
var jwtHeader = new JsonWebTokenHandler().CreateToken(new SecurityTokenDescriptor
{
Claims = accessTokenClaims,
Expires = DateTime.UtcNow.AddMinutes(15),
Issuer = "me",
Audience = "my friends at MS Github",
IssuedAt = DateTime.UtcNow,
NotBefore = DateTime.UtcNow,
SigningCredentials = _signingCredentials
});

return jwtHeader.ToString();
но когда я запускаю код, я получаю сообщение об ошибке:

Исключение типа «System.MethodAccessException» произошло в System.Private.CoreLib.dll, но не было обработано в пользовательском коде: «Попытка по методу» «Microsoft.IdentityModel.KeyVaultExtensions.KeyVaultCryptoProvider.Create(System.String, System.Object[])» для доступа к методу «Microsoft.IdentityModel.Tokens.CryptoProviderFactory.ShouldCacheSignatureProvider(Microsoft.IdentityModel.Tokens.SignatureProvider)» не удалось.'

Похоже на проблему со ссылками, но я не могу понять ее правильно.
Я использую Microsoft.IdentityModel.KeyVaultExtensions Version="7.7.1" и Microsoft.IdentityModel.JsonWebTokens Version="8.14.0"
Кто-нибудь может помочь я?

Подробнее здесь: https://stackoverflow.com/questions/797 ... eption-occ
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»