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?
Antworten:
In der Vergangenheit hatte ich einen Authentifizierungsserver, der Token ausstellte. Anschließend hat der Client das Authentifizierungstoken mit der Anforderung des Formulars an einen Autorisierungsserver gesendet:
"Der Client mit dieser Anwendungs-ID fordert den Zugriff für den im angehängten Authentifizierungstoken definierten Benutzer an, um auf Inhalt X zuzugreifen."
Der Autorisierungsserver hat überprüft, ob der Benutzer autorisiert wurde, und dem Client ein neues Autorisierungstoken ausgestellt. Der Client hat dieses Token dann an den Dienst übergeben, der Inhalt X bereitgestellt hat.
In diesem Fall benötigte der Autorisierungsserver ein Konfigurationsupdate, um über neue Inhalte Y informiert zu werden.
Sie können es so ändern, dass die Ressourcenserver den Autorisierungsserver auffordern, ein Token mit angehängten benutzerdefinierten Ansprüchen zu erstellen.
quelle