Zugriffsrichtlinie für API-Erteilungstypen

Eine Zugriffsrichtlinie kann auf die API-gesteuerte Nutzung von OpenID Connect und OAuth 2.0 angewendet werden. Diese API-Nutzung ist im Allgemeinen als Erteilungstyp ROPC (Resource Owner Password Credentials = Kennwortberechtigungsnachweise für Ressourceneigner) bekannt, umfasst jedoch auch den zusicherungsbasierten JWT-Erteilungstyp. Diese Erteilungstypen unterscheiden sich hinsichtlich ihrer Funktionsweise grundlegend vom Berechtigungscode und den impliziten Erteilungstypen. Es ist kein Browserbenutzeragent vorhanden und es werden keine Anforderungen an den Endpunkt /authorize gesendet. Da dieser Browserendpunkt nicht verwendet wird, muss die Zugriffsrichtlinie für eine Anwendung anders bewertet werden.

Wenn eine Zugriffsrichtlinie angewendet wird, betrifft dies die folgenden grundlegenden Geschäftsanforderungen:

  • Verfügt der authentifizierte Benutzer über ausreichende Berechtigung für den Zugriff auf diese Anwendung?
  • Ist der authentifizierte Benutzer zum Zugriff auf diese Anwendung berechtigt?
  • Ist das Gerät oder der Clientkontext, das bzw. der für den Zugriff auf diese Anwendung verwendet wird, zulässig?

In traditionellen Browserabläufen werden diese Anforderungen angewendet. Wenn sie nicht erfüllt werden, fordert der Browser zur MFA auf oder er gibt eine Fehlerseite an den Benutzer zurück, der den Zugriff stoppt. Bei einem API-Erteilungstyp sind nicht alle diese Fähigkeiten verfügbar. Daher muss sich der Benutzer mit den folgenden Themen befassen.

  • Empfang von Kontext von einem Clientgerät
  • Rückgabe einer MFA-Anforderung, einschließlich
    • der APIs, die zur Durchführung der MFA erforderlich sind
    • der Vorgehensweise für den Zugriff auf die APIs
API-gesteuerte Erteilungstypen können dennoch einen Fehler zurückgeben; daher bleibt eine Zurückweisung zum größten Teil unverändert.

Der Erteilungstyp 'policyauth'

Um eine Zugriffsrichtlinie effektiv auf einen reinen API-OAuth 2.0-Ablauf anzuwenden, wird ein neuer Erteilungstyp eingeführt. Dieser Erteilungstyp ermöglicht es einem Client, der Zugriffsrichtlinie vor jeglicher Authentifizierung einigen Kontext bereitzustellen. Diese Fähigkeit ermöglicht die Implementierung einer erweiterten Funktionalität für den Benutzer. Wenn beispielsweise ein Benutzer auf eine Anmeldeschaltfläche klickt, bevor er zur Eingabe von Berechtigungsnachweisen aufgefordert wird, erfolgt die Evaluierung des Benutzers gemäß der zugeordneten Richtlinie. Wenn die Richtlinienanforderungen nicht erfüllt werden, empfängt der Benutzer eine Fehlernachricht, die angibt, dass die Authentifizierung oder der Zugriff auf die Ressource aufgrund der Richtlinienanforderungen nicht möglich ist.

Wenn der Erteilungstyp policyauth verwendet wird, wird eine der folgenden Antworten zurückgegeben.
Eine Zurückweisung
Ein Fehler gibt an, dass aufgrund der Richtlinie kein Zugriff erteilt werden kann.
Eine Anforderung
Ein Token, das für den Zugriff auf Authentifizierungs-APIs verwendet werden kann, wird mit einer Liste zulässiger Authentifizierungsfaktoren zurückgegeben.

Antworten auf MFA-Anforderungen von /token

Wenn eine Zugriffsrichtlinie auf einen API-OAuth 2.0-Ablauf angewendet wird, muss eine MFA-Anforderung Teil des API-Vertrags werden. Die traditionellen Methoden, bei denen die MFA-Schritte als Teil der Anforderung an /authorize ausgeführt wurden, können nicht verwendet werden.

Wenn eine MFA-Anforderung von /token zurückgegeben wird, gilt Folgendes:

  • Der Wert für den Geltungsbereich (scope) ist mfa_challenge und es werden keine anderen Geltungsbereiche zurückgegeben.
  • Es wird ein Zugriffstoken ausgegeben.
    • Das Zugriffstoken ist für den Zugriff auf die erforderlichen Authentifizierungs-APIs berechtigt. Es ist wichtig, dieses Zugriffstoken und nicht ein normales API-Client-Zugriffstoken zu verwenden. Dieses Token wird verwendet, um bereits ausgeführte Authentifizierungsfaktoren und vergangene Aktionen in der Erteilung zu verfolgen.
    • Das Zugriffstoken gibt active: true für Anforderungen an /introspect zurück. Alle APIs, die einen Ressourcenserver schützen, müssen bei Verwendung von MFA-Anforderungen eine Prüfung implementieren, mit der sichergestellt wird, dass der von /introspect zurückgegebene Geltungsbereich (scope) nicht mfa_challenge lautet.
  • Wahlweise wird ein Array von Faktoren, die zur Erfüllung dieser Anforderung ausgeführt werden können, für allowedFactors aufgelistet.

Kontext für /token bereitstellen

Der API-Client, der eine Anforderung an /token ausführt, kann klar strukturierte und beliebige Kontextinformationen für /token für die Verwendung in der Zugriffsrichtlinienauswertung bereitstellen.

Es müssen drei obligatorische Kontexteinzelinformationen eingeschlossen werden.

  • sessionId - Eine beliebige Sitzungs-ID, die vom OAuth-Client ausgegeben und verwaltet wird.
  • ipAddress - Da der OAuth-Client für die Interaktionen mit dem Benutzeragenten verantwortlich ist, muss die IP-Adresse des Benutzers explizit angegeben werden.
  • userAgent - Ebenso wie die IP-Adresse muss der Benutzeragent des Benutzers explizit angegeben werden.

Weitere Parameter können eingeschlossen werden und Kontextattributbedingungen für diese Werte erstellt werden.

/tokenHinweis: Wenn der context Parameter in einer Anfrage an nicht enthalten ist, wird die Zugriffsrichtlinie nicht aufgerufen.

Kontext wird in Form von Base64-codierter JSON für /token bereitgestellt. Nachfolgend ein Beispiel für JSON-Nutzdaten für 'context':

{
    "sessionId":"MDNjZmQ3NDM2NjFmMDc5NzVmYTJmMT",
    "ipAddress":"129.42.38.10",
    "userAgent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36"
}

Kontextinformationen werden als vertrauenswürdig betrachtet, wenn sie von einem API-Client bereitgestellt werden, für den eine sichere Gruppe von Clientberechtigungsnachweisen ausgegeben wurde. Dieser API-Client muss sicherstellen, dass vom verarbeitenden Benutzeragenten Kontext nicht willkürlich bereitgestellt werden darf, der dann zur Umgehung betrieblicher Kontrollen verwendet werden kann.

refresh tokenDer Kontext muss immer dann angegeben werden, wenn eine Zugriffsrichtlinie für alle API-Berechtigungsarten, policyAuth, JWT Bearer, ROPC und aufgerufen wird.

mfa_challenge erfüllen

Um eine MFA-Anforderung zu erfüllen, die vom Endpunkt /token zurückgegeben wird, können die Authentifizierungsfaktor-APIs verwendet werden. Diese APIs werden verwendet, um sowohl die Anforderungen für den ersten Faktor als auch die Anforderungen für den zweiten Faktor zu erfüllen. Das Zugriffstoken, das in der mfa_challenge-Antwort zurückgegeben wird, wird zum Anfordern des entsprechenden Faktors verwendet. Nach einem erfolgreichen Faktorabschluss wird ein JWT zurückgegeben. Dieses JWT enthält einige wichtige Einzelinformationen.

  • Die Erteilungs-ID (grant_id), die von dem Zugriffstoken abgeleitet wird, das zum Anfordern der Faktor-API verwendet wurde. Mithilfe dieser ID wird die Korrelation der verschiedenen Anforderungen an /token gewährleistet.
  • Der Faktor (factor), der ausgeführt wurde, sowie alle zuvor ausgeführten Faktoren.

Dieses JWT wird im Rahmen eines jwtBearer Grant-Type-Ablaufs an /token übermittelt. Die Zugriffsrichtlinie wird neu bewertet und es wird ein Token mit vollständigen Berechtigungen oder eine weitere Anforderung ausgegeben.

Um ein JWT nach einer Faktorverifizierung zu empfangen, muss der Abfragezeichenfolgeparameter returnJwt=true eingeschlossen werden.
Hinweis:
  • Bei transienten Faktor-APIs wird das sub-Feld des JWT mit den transienten Informationen gefüllt, die in der Anforderung verwendet werden. Zum Beispiel die E-Mail-Adresse oder die Telefonnummer statt einer userId.
  • Wenn returnJwt=true angegeben wird, ändert sich der Statuscode von Verifizierungs-APIs, die normalerweise den Statuscode 204 ohne HTTP-Hauptteil zurückgeben, in 200. Sie geben als Inhaltstyp (content-type) den Wert application/json zurück und haben eine Antwort wie:
    {
        "assertion:"ey..."}
    Für Faktorverifizierungen, die bereits JSON zurückgeben, wird der Antwort die Eigenschaft assertion hinzugefügt.

Zugriffsrichtlinie auf unterschiedliche Erteilungstypen anwenden

Wenn Sie eine Anwendung konfigurieren, ist eine Option vorhanden, mit der angegeben werden kann, ob die Zugriffsrichtlinie auf einen bestimmten Erteilungstyp angewendet wird.

Mit dieser Konfiguration wird gesteuert, ob die Zugriffsrichtlinie in einer Anforderung an /token auf der Basis des Werts des Parameters grant_type ausgewertet wird. Diese Auswertung gilt unabhängig von allen vorherigen Aufrufen von /token für eine bestimmte Erteilung.

Diese Konfiguration kann auf die folgenden Erteilungstypen angewendet werden:
policyauth
Die Zugriffsrichtlinie muss immer aktiviert werden.
ROPC
Die Zugriffsrichtlinie kann inaktiviert werden, wenn die Nutzung des Erteilungstyps ROPC die mfa_challenge-Antwort nicht unterstützt.
JWT Bearer
Wenn die Zugriffsrichtlinie für den Erteilungstyp jwt-bearer inaktiviert wird, kann keine MFA über den policyauth-Ablauf erfolgen. Es wird keine Zugriffsrichtlinie ausgeführt, nachdem der erste Faktor ausgeführt wurde.
Refresh token
Kann nur auf eine Untergruppe von refresh_token-Anforderungen angewendet werden, die den Kontextparameter original_grant_type als Kontextattributbedingung verwenden.