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
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.
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_challengeund 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: truefür Anforderungen an/introspectzurü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/introspectzurückgegebene Geltungsbereich (scope) nichtmfa_challengelautet.
- Wahlweise wird ein Array von Faktoren, die zur Erfüllung dieser Anforderung ausgeführt werden können, für
allowedFactorsaufgelistet.
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/tokengewä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.
returnJwt=true eingeschlossen werden.- Dieses Flag wird von den folgenden APIs für die Authentifizierung mit dem ersten Faktor unterstützt:
- Dieses Flag wird von den folgenden MFA-APIs unterstützt:
- https://securitypoc.ice.ibmcloud.com/developer/explorer/#!/Email_One-time_Password_2.0/attemptEmailotpVerification_2_0
Dieses Flag wird auch von der API für transiente Verifizierung unterstützt. Um das von ihr ausgegebene JWT verwenden zu können, muss jedoch die Zuordnung des Subjektanspruchs konfiguriert werden.
- https://securitypoc.ice.ibmcloud.com/developer/explorer/#!/SMS_One-time_Password_2.0/attemptSmsotpVerification_2_0
Dieses Flag wird auch von der API für transiente Verifizierung unterstützt. Um das von ihr ausgegebene JWT verwenden zu können, muss jedoch die Zuordnung des Subjektanspruchs konfiguriert werden.
- https://securitypoc.ice.ibmcloud.com/developer/explorer/#!/FIDO/assertionResult
Ein Passwort kann entweder als erster oder als zweiter Faktor verwendet werden.
- https://securitypoc.ice.ibmcloud.com/developer/explorer/#!/Voice_One-time_Password_2.0/attemptVoiceotpVerification_2_0
Dieses Flag wird auch von der API für transiente Verifizierung unterstützt. Um das von ihr ausgegebene JWT verwenden zu können, muss jedoch die Zuordnung des Subjektanspruchs konfiguriert werden.
- https://securitypoc.ice.ibmcloud.com/developer/explorer/#!/One-time_Password/attemptOtpVerification_2_0
- https://securitypoc.ice.ibmcloud.com/developer/explorer/#!/Time-based_One-time_Password_2.0/verifyTotpEnrollment_2_0
- https://securitypoc.ice.ibmcloud.com/developer/explorer/#!/Email_One-time_Password_2.0/attemptEmailotpVerification_2_0
- 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 eineruserId. - Wenn
returnJwt=trueangegeben wird, ändert sich der Statuscode von Verifizierungs-APIs, die normalerweise den Statuscode204ohne HTTP-Hauptteil zurückgeben, in200. Sie geben als Inhaltstyp (content-type) den Wertapplication/jsonzurück und haben eine Antwort wie:
Für Faktorverifizierungen, die bereits JSON zurückgeben, wird der Antwort die Eigenschaft{ "assertion:"ey..."}assertionhinzugefü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.
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-bearerinaktiviert wird, kann keine MFA über denpolicyauth-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 Kontextparameteroriginal_grant_typeals Kontextattributbedingung verwenden.