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?
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