OAuth Shared Authorization Server für mehrere Apps

8

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?

Joshua Barron
quelle
Für zukünftige Betrachter dieser Frage habe ich nie eine Lösung für die verbrauchende Ressource gefunden, um benutzerdefinierte Ansprüche hinzuzufügen. Am Ende habe ich einen Autorisierungsserver geschrieben, der eine gemeinsame Konfiguration für jeden Ressourcenserver akzeptiert und darauf basierend benutzerdefinierte Ansprüche generiert.
Joshua Barron
Es scheint, als müssten Sie Ihre Ansprüche in einer zentralen Datenbank verwalten und dann ausfüllen, wenn das Token ausgestellt wurde. OAuth an sich ist eigentlich nur Authentifizierung / Token-Ausgabe. Die Autorisierung ist immer noch ein Teil, den Sie einstecken (Ansprüche, Rollen usw.) und separat verwalten müssen.
Kasey Speakman

Antworten:

1

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.

Chad Clark
quelle