Nel mio negozio abbiamo un paio di API Web .NET che utilizzano i token OAuth per l'autenticazione. Attualmente, ciascuna API Web è sia server di autorizzazione che di risorse. Gli utenti si autenticano su tutte queste API utilizzando le stesse credenziali, ma al momento devono autenticarsi in modo indipendente per ciascuna API.
Sono interessato a creare un server di autorizzazione condiviso (a la link ), ma mi sto bloccando sulla trasformazione delle richieste. È molto utile per noi essere in grado di aggiungere attestazioni personalizzate (specifiche per l'applicazione) al token che viene emesso, sulla falsariga del seguente esempio:
public override Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
/* validate credentials here... */
var identity = new ClaimsIdentity("JWT");
identity.AddClaim(new Claim(ClaimTypes.Name, context.UserName));
identity.AddClaim(new Claim("sub", context.UserName));
identity.AddClaim(new Claim(ClaimTypes.Role, "Manager"));
identity.AddClaim(new Claim(ClaimTypes.Role, "Supervisor"));
var props = new AuthenticationProperties(new Dictionary<string, string>
{
{
"audience", (context.ClientId == null) ? string.Empty : context.ClientId
}
});
var ticket = new AuthenticationTicket(identity, props);
context.Validated(ticket);
return Task.FromResult<object>(null);
}
Da quello che posso vedere, se creo un server di autorizzazione comune, tutte le trasformazioni richieste devono esserci. Ciò significa che i server di risorse (le nostre diverse API Web) non possono aggiungere rivendicazioni personalizzate al token dell'utente? Posso aggiungere attestazioni specifiche all'applicazione che richiede il token sul server di autorizzazione o devo eseguire il rig up di qualcosa in modo che il server di autorizzazione aggiunga determinate attestazioni basate sull'app richiedente?