2015-11-05 14 views
5

Ho un caso d'uso in cui desidero la mia nuova applicazione (che è l'origine dell'autenticazione) per fornire un JWT alle applicazioni legacy.Codifica del token JWT utilizzando System.IdentityModel.Tokens.Jwt in ASP.NET 5

Sto tentando di utilizzare il pacchetto, System.IdentityModel.Tokens.Jwt 5.0.0-beta7 (e potrei facilmente passare a beta8 se necessario). La creazione del token era semplice, ma sto riscontrando problemi nel firmarlo correttamente. Qui è il mio codice corrente:

Claim[] claims = { 
    new Claim(ClaimTypes.Email, "[email protected]"), 
    new Claim(ClaimTypes.Role, "admin"), 
    new Claim(ClaimTypes.Uri, ""), 
    new Claim(ClaimTypes.Expiration, DateTime.UtcNow.Add(TimeSpan.FromDays(1)).ToString()), 
    new Claim("personId", personId.ToString()) 
}; 

var key = Convert.FromBase64String("my super secret key goes here"); 
var signingCredentials = new SigningCredentials(
    new SymmetricSecurityKey(key), 
    SecurityAlgorithms.HMAC_SHA256, 
    SecurityAlgorithms.Sha256Digest 
); 
var jwt = new JwtSecurityToken("localhost", "all", claims, 
    DateTime.UtcNow, DateTime.UtcNow.AddDays(1), signingCredentials);    

var handler = new JwtSecurityTokenHandler(); 
handler.WriteToken(jwt); 

return Content($"{handler.WriteToken(jwt)}"); 

Se non firmo il token, tutto funziona correttamente. Tuttavia, non appena aggiungo credenziali di firma, ricevo un messaggio di errore che HMAC non è supportato. Ho trovato un altro post SO che dice support for symmetric keys does not yet exist. Tuttavia, nella mia ricerca, vedo un ampio uso della libreria. In particolare, vedo l'uso di InMemorySymmetricSecurityKey. Tuttavia, quando provo ad usarlo da solo, non può essere trovato in nessuno spazio dei nomi, quindi sono un po 'confuso come dove vado da qui.

Questa è una spiegazione prolissa per chiedere fondamentalmente - come faccio a firmare correttamente il JWT con un semplice segreto?

risposta

3

Quando ci siamo trasferiti alle nuove versioni di CoreClr, abbiamo dovuto abbandonare temporaneamente il supporto per HMAC. Abbiamo scelto di aggiungere il supporto per ECDSA in RC1 e di aggiungere nuovamente HMAC in RC2.

Ci scusiamo per il fastidio. Puoi aggiungere il tuo SignatureProvider o attendere un paio di settimane.

+0

Grazie per la risposta rapida. Sospettavo qualcosa del genere, ma volevo confermare. Userò un'altra implementazione per il tempo e tornerò su questo dopo RC2. Grazie ancora! – JasCav