Sulla base del grande esempio di Shaun Luttin allo https://stackoverflow.com/a/30857524 sono stato in grado di utilizzare quel codice per generare e consumare token al portatore. Piccole modifiche sono state per ottenere gli ultimi pacchetti:Token portabili JWT con ASP.NET Identity 3
"dependencies": {
"Microsoft.AspNet.Authentication.JwtBearer": "1.0.0-rc1-final",
"AspNet.Security.OpenIdConnect.Server": "1.0.0-beta4"
}
Anche se il codice è un ottimo inizio, non è una soluzione completa che integra w/ASP.NET identità completamente. Ho modificato classe AuthorizationProvider come segue:
public override Task GrantResourceOwnerCredentials(
GrantResourceOwnerCredentialsContext context)
{
var user = _userManager.FindByNameAsync(context.UserName).Result;
if (user == null)
{
context.Rejected("The user name or password is incorrect.");
}
else
{
var signInManager = context.HttpContext.RequestServices
.GetRequiredService<SignInManager<ApplicationUser>>();
if (signInManager.CanSignInAsync(user).Result &&
_userManager.CheckPasswordAsync(user, context.Password).Result)
{
var principal = signInManager.CreateUserPrincipalAsync(user).Result;
//To avoid leaking confidential data, AspNet.Security.OpenIdConnect.Server
//refuses to serialize the claims that don't explicitly specify a destination.
foreach (var claim in principal.Claims)
claim.WithDestination("token id_token");
context.Validated(principal);
}
else
context.Rejected("The user name or password is incorrect.");
}
return Task.FromResult(0);
}
sto usando CreateUserPrincipalAsync per creare il ClaimsPrincipal per il metodo convalidato. C'è un modo migliore per integrare l'identità di ASP.NET?
Eventuali aggiornamenti su questo? Non riesco a ottenere il 'signInManager', né il' _userManager. Forse vengono iniettati? – Lars