In meinem Shop gibt es einige .NET-Web-APIs, die OAuth-Token zur Authentifizierung verwenden. Derzeit ist jede Web-API sowohl Autorisierungs- als auch Ressourcenserver. Benutzer authentifizieren sich bei allen diesen APIs mit demselben Berechtigungsnachweis, müssen sich jedoch derzeit bei jeder API unabhängig authentifizieren.
Ich bin daran interessiert, einen gemeinsam genutzten Autorisierungsserver zu erstellen (a la http://bitoftech.net/2014/10/27/json-web-token-asp-net-web-api-2-jwt-owin-authorization-server/). ), aber ich werde auf Anspruchstransformation aufgehängt. Für uns ist es sehr nützlich, dem ausgestellten Token benutzerdefinierte Ansprüche (anwendungsspezifisch) hinzufügen zu können, wie im folgenden Beispiel dargestellt:
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);
}
Soweit ich sehen kann, muss beim Erstellen eines gemeinsamen Autorisierungsservers die gesamte Anspruchstransformation dort stattfinden. Bedeutet dies, dass die Ressourcenserver (unsere verschiedenen Web-APIs) dem Token des Benutzers keine benutzerdefinierten Ansprüche hinzufügen können? Kann ich Ansprüche hinzufügen, die für die Anwendung spezifisch sind, die das Token auf dem Autorisierungsserver anfordert, oder muss ich etwas manipulieren, damit der Autorisierungsserver bestimmte Ansprüche basierend auf der anfordernden App hinzufügt?