DNX Core 5.0 JwtSecurityTokenHandler IDX10640: алгоритм не поддерживается: «http://www.w3.org/2001/04/xmldsig-more#hmac-sha256»

Я пытаюсь внедрить токены JWT, но постоянно сталкиваюсь со следующим исключением: IDX10640: алгоритм не поддерживается: 'http://www.w3.org/2001/04/xmldsig-more#hmac-sha256' при попытке записать токен в компактную строку json.

const string issuer = "issuer";
const string audience = "audience";
byte[] keyForHmacSha256 = new byte[32];
new Random().NextBytes(keyForHmacSha256);

var claims = new List<Claim> { new Claim("deviceId", "12") };
var now = DateTime.UtcNow;
var expires = now.AddHours(1);
var signingCredentials = new SigningCredentials(
    new SymmetricSecurityKey(keyForHmacSha256), 
    SecurityAlgorithms.HmacSha256Signature, SecurityAlgorithms.Sha256Digest);

var token = new JwtSecurityToken(issuer, audience, claims, now, expires, signingCredentials);
return _tokenHandler.WriteToken(token);

Любые идеи по решению этой проблемы?

Обновление 1:

Вышеупомянутая ошибка возникает с «System.IdentityModel.Tokens.Jwt»: «5.0.0-beta7-208241120»

Обновление 2:

Обновленный код


person sboulema    schedule 07.09.2015    source источник
comment
Я испытываю эту же проблему. Вы используете 5.0.0-beta7-208241120 версию библиотеки System.IdentityModel.Tokens.Jwt?   -  person Joshua Barron    schedule 09.09.2015
comment
Да, приятно слышать, что я не один такой...   -  person sboulema    schedule 09.09.2015
comment
1) Зачем вам создавать криптографический ключ, используя System.Random? 2) ключ 128 байт не имеет смысла. Вы хотели 128-битный ключ (16 байт)? 256 бит / 32 байта также были бы разумным выбором. 3) Использование местного времени тоже довольно странно.   -  person CodesInChaos    schedule 09.09.2015
comment
1) Я написал это просто для упрощения раздела кода 2) Ошибка возникает и с ключом 128/256 бит 3) Исправлено   -  person sboulema    schedule 09.09.2015
comment
См. ответ Брента ниже и этот билет для статуса: github. ком/AzureAD/   -  person Joshua Barron    schedule 09.09.2015


Ответы (2)


Сейчас у нас нет поддержки симметричных ключей. Надеюсь получить это в ближайшее время.

person Brent Schmaltz    schedule 09.09.2015

Поддержка будет в версии RC2. Протестировано с пакетами nightly nuget из http://myget.org/gallery/azureadwebstacknightly.

Требовались лишь небольшие изменения кода, чтобы все заработало.

const string issuer = "issuer";
const string audience = "audience";
var keyForHmacSha256 = Encoding.ASCII.GetBytes("<tokenSecret>");
var key = new SymmetricSecurityKey(keyForHmacSha256);
var claims = new List<Claim> { new Claim("deviceId", "12") };
var now = DateTime.UtcNow;
var expires = now.AddHours(1);
var signingCredentials = new SigningCredentials(key, SecurityAlgorithms.HMAC_SHA256);

var token = new JwtSecurityToken(issuer, audience, claims, now, expires, signingCredentials);
return _tokenHandler.WriteToken(token);

Проверка токена может быть выполнена с помощью следующего фрагмента кода.

SecurityToken securityToken;
var validationParameters = new TokenValidationParameters
{
    ValidateLifetime = true,
    ValidateAudience = true,
    ValidateIssuer = true,
    RequireExpirationTime = true,
    ValidateSignature = true,
    ValidAudience = audience,
    ValidIssuer = issuer,
    IssuerSigningKey = key,
    RequireSignedTokens = true,
    ValidateIssuerSigningKey = true               
};

tokenHandler.ValidateToken(token, validationParameters, out securityToken);
person sboulema    schedule 30.12.2015