Я придумал следующий код:
Код: Выделить всё
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
Мобильная версия