En mi tienda tenemos un par de API web .NET que usan tokens OAuth para la autenticación. Actualmente, cada API web es un servidor de autorización y de recursos. Los usuarios se autentican en todas estas API con la misma credencial, pero actualmente necesitan autenticarse en cada API de forma independiente.
Estoy interesado en crear un servidor de autorización compartido (a la http://bitoftech.net/2014/10/27/json-web-token-asp-net-web-api-2-jwt-owin-authorization-server/ ), pero estoy colgado de la transformación de reclamos. Para nosotros es muy útil poder agregar notificaciones personalizadas (específicas de la aplicación) al token que se emite, de acuerdo con el siguiente ejemplo:
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);
}
Por lo que puedo ver, si creo un servidor de autorización común, todas las transformaciones de reclamos deben ocurrir allí. ¿Significa esto que los servidores de recursos (nuestras diferentes API web) no pueden agregar ningún reclamo personalizado al token del usuario? ¿Puedo agregar reclamos específicos a la aplicación que solicita el token en el servidor de Autorización, o necesito armar algo para que el servidor de autorización agregue ciertos reclamos basados en la aplicación solicitante?