Ошибка JWT IDX10634: невозможно создать SignatureProvider С#

Я пытаюсь запустить свое приложение, но оно застряло со следующей ошибкой:

System.NotSupportedException HResult = 0x80131515 Сообщение = IDX10634: Невозможно создать SignatureProvider. Алгоритм: "[PII скрыт по умолчанию. Установите флаг 'ShowPII' в IdentityModelEventSource.cs на true чтобы раскрыть это.] ', SecurityKey:' [PII по умолчанию скрыт. Установить 'ShowPII' флаг в IdentityModelEventSource.cs для true, чтобы показать его.] ' не поддерживается.

Где

Алгоритм RS256

Это застревает при выполнении этой инструкции: var sectoken = tokenHandler.CreateToken(tokenDescriptor);

Что это значит? Что пошло не так в моем коде? Как я могу решить это?


Вот мой код:

using System.Security.Claims;
using System.Text;
using System.Threading.Tasks;
//...
public class TokenManager
{
    private string unencoded_key = "CaptainDeadpool";
    private string encoded_key = "CaptainDeadpool";
//...
    public TokenManager()
    {
        var plainTextBytes = Encoding.UTF8.GetBytes(unencoded_key);
        encoded_key = Convert.ToBase64String(plainTextBytes);
    }


    public string CreateFromUsername(string usr, int? timer)
    {
        if (timer == null) {  timer = 30; }
        double timeadd = Convert.ToDouble(timer);

        var secret = Convert.FromBase64String(encoded_key);
        var tokenHandler = new JwtSecurityTokenHandler();

        var actual = DateTime.UtcNow;

        var tokenDescriptor = new SecurityTokenDescriptor
        {
            Subject = new ClaimsIdentity(new[] { new Claim(ClaimTypes.Name, usr) }),
            Expires = actual.AddMinutes(timeadd),

            SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(secret), SecurityAlgorithms.RsaSha256Signature)
        };

        var sectoken = tokenHandler.CreateToken(tokenDescriptor);
        var stringtoken = tokenHandler.WriteToken(sectoken);

        return stringtoken;
    }
//...

Вот мой контент tokenDescriptor при выдаче ошибки:

CONTENT

Ответ 1

Не знаю, что такое сообщение об ошибке, но это не имеет значения, я думаю, потому что ваш код логически ошибочен. RSA является ассиметричным алгоритмом, но вы пытаетесь использовать с ним SymmetricSecurityKey.

Таким образом, либо используйте другой (симметричный) алгоритм подписи (и убедитесь, что ваш размер ключа действителен для этого алгоритма), например:

// adjust key size
private string unencoded_key = "CaptainDeadpool!";
private string encoded_key = "CaptainDeadpool!";
// ...
SigningCredentials = new SigningCredentials(
    new SymmetricSecurityKey(secret), 
    SecurityAlgorithms.HmacSha256Signature)

Или введите действительный ключ, например:

private readonly RSA _rsa;
public TokenManager() {
    // import instead of creating new, if necessary
    _rsa = new RSACryptoServiceProvider(2048);            
}
// ...

SigningCredentials = new SigningCredentials(
    new RsaSecurityKey(_rsa), 
    SecurityAlgorithms.RsaSha256Signature)

Ответ 2

У меня была такая же проблема при использовании hmacSha256. если ваш ключ безопасности слишком короткий, вы можете получить эту ошибку. Я увеличил размер секретного secureKey, и это решило мою проблему.

 var authSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("You_Need_To_Provide_A_Longer_Secret_Key_Here"));