Na minha loja, temos algumas APIs da Web .NET que usam tokens OAuth para autenticação. Atualmente, cada API da web é um servidor de autorização e de recursos. Os usuários se autenticam em todas essas APIs usando a mesma credencial, mas atualmente precisam se autenticar em cada API independentemente.
Estou interessado em criar um servidor de autorização compartilhado (em http://bitoftech.net/2014/10/27/json-web-token-asp-net-web-api-2-jwt-owin-authorization-server/ ), mas estou ficando preso na transformação de reivindicações. É altamente útil poder adicionar declarações personalizadas (específicas do aplicativo) ao token emitido, de acordo com o exemplo a seguir:
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);
}
Pelo que pude ver, se eu criar um servidor de Autorização comum, todas as transformações de declarações precisarão acontecer lá. Isso significa que os servidores de recursos (nossas diferentes APIs da Web) não podem adicionar reivindicações personalizadas ao token do usuário? Posso adicionar reivindicações específicas ao aplicativo que está solicitando o token no servidor de Autorização - ou preciso montar algo para que o servidor de autorização adicione determinadas declarações com base no aplicativo solicitante?