J'ai un conflit lors de l'utilisation de System.IdentityModel.Tokens:
using System;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.IdentityModel.Tokens;
using System.IdentityModel.Tokens.Jwt;
using System.Text;
public voidGenereToken()
{
const string sec = "401b09eab3c013d4ca54922bb802bec8fd5318192b0a75f201d8b3727429090fb337591abd3e44453b954555b7a0812e1081c39b740293f765eae731f5a65ed1";
var now = DateTime.UtcNow;
var securityKey = new InMemorySymmetricSecurityKey(Encoding.Default.GetBytes(sec));
var signingCredentials = new SigningCredentials(securityKey,
SecurityAlgorithms.RsaSha256Signature, SecurityAlgorithms.Sha256Digest);
var header = new JwtHeader(signingCredentials);
var payload = new JwtPayload
{
{"iss", "a5fgde64-e84d-485a-be51-56e293d09a69"},
{"scope", "https://example.com/ws"},
{"aud", "https://example.com/oauth2/v1"},
{"iat", now},
};
var secToken = new JwtSecurityToken(header, payload);
var handler = new JwtSecurityTokenHandler();
var tokenString = handler.WriteToken(secToken);
Console.writeLine(tokenString)
}
J'ai l'erreur suivante lorsque je crée un en-tête ( var header = new JwtHeader (signatureCredentials); ):
Le type d'argument 'System.IdentityModel.Tokens.SigningCredentials' n'est pas assignable au type de paramètre 'Microsoft.IdentityModel.Tokens.SigningCredentials'
Je ne comprends pas, car tout mon type fait référence à System.IdentityModel.Tokens . et dans la documentation JwtHeader Constructor besoin System.IdentityModel.Tokens.SigningCredentials
Je ne sais pas ce qui ne va pas ...
System.IdentityModel.Tokens.Jwt version 5.0.0.0 dépend de Microsoft.IdentityModel.Tokens.
Vous devez utiliser SigningCredentials dans l'espace de noms Microsoft.IdentityModel.Tokens.
Exemple:
using System;
using System.IdentityModel.Tokens;
using System.IdentityModel.Tokens.Jwt;
using System.Text;
public void voidGenereToken() {
const string sec = "401b09eab3c013d4ca54922bb802bec8fd5318192b0a75f201d8b3727429090fb337591abd3e44453b954555b7a0812e1081c39b740293f765eae731f5a65ed1";
var now = DateTime.UtcNow;
var securityKey = new Microsoft.IdentityModel.Tokens.SymmetricSecurityKey(Encoding.Default.GetBytes(sec));
var signingCredentials = new Microsoft.IdentityModel.Tokens.SigningCredentials(
securityKey,
SecurityAlgorithms.HmacSha256Signature);
var header = new JwtHeader(signingCredentials);
var payload = new JwtPayload
{
{"iss", "a5fgde64-e84d-485a-be51-56e293d09a69"},
{"scope", "https://example.com/ws"},
{"aud", "https://example.com/oauth2/v1"},
{"iat", now},
};
var secToken = new JwtSecurityToken(header, payload);
var handler = new JwtSecurityTokenHandler();
var tokenString = handler.WriteToken(secToken);
Console.WriteLine(tokenString);
}
Peut-être que vous utilisez Jwt version 5.0.0.0 ou supérieure. J'ai déjà fait face au même problème.
La nouvelle version du gestionnaire JWT accepte l'espace de noms Microsoft.IdentityModel.Tokens.
var tokenDescriptor = new Microsoft.IdentityModel.Tokens.SecurityTokenDescriptor
{
Subject = claimsIdentity,
Audience = allowedAudience,
Issuer = issuerName,
Expires = DateTime.MaxValue,
SigningCredentials = new Microsoft.IdentityModel.Tokens.SigningCredentials(
new Microsoft.IdentityModel.Tokens.SymmetricSecurityKey(symmetricKey), //symmetric key
System.IdentityModel.Tokens.SecurityAlgorithms.HmacSha256Signature,
System.IdentityModel.Tokens.SecurityAlgorithms.Sha256Digest)
};
var tokenHandler = new JwtSecurityTokenHandler();
var token = tokenHandler.CreateToken(tokenDescriptor);