Hinweis:
- Dieses Tutorial erfordert Zugriff auf Oracle Cloud. Informationen zur Registrierung für einen kostenlosen Account finden Sie unter Erste Schritte mit Oracle Cloud Infrastructure Free Tier.
- Es verwendet Beispielwerte für Oracle Cloud Infrastructure-Zugangsdaten, -Mandanten und -Compartments. Ersetzen Sie diese Werte nach Abschluss der Übung durch Werte, die für Ihre Cloud-Umgebung spezifisch sind.
Sicherer Zugriff auf Oracle Integration mit Zugriffstoken aus Microsoft Entra ID
Einführung
Da Oracle Integration-Kunden Multicloud-Strategien einführen, müssen sie häufig Geschäftsanwendungen und -prozesse über verschiedene Cloud-Provider hinweg verbinden. Beispiel: Ein Unternehmen verfügt möglicherweise über eine Anwendung, die auf Microsoft Azure ausgeführt wird und auf Daten aus Oracle Cloud Infrastructure-Anwendungen zugreifen muss. Normalerweise erhalten Sie ein Token von Oracle Cloud Infrastructure Identity and Access Management (OCI IAM), um diese Daten abzurufen. Die Verwendung mehrerer Cloud-Provider bedeutet jedoch, mehrere Token zu verwenden, die komplex sein und Sicherheitsrisiken darstellen können.
Stellen Sie sich vor, wie praktisch es wäre, wenn Sie ein OAuth-Token zur Integration mit Anwendungen über verschiedene Cloud-Provider hinweg verwenden könnten. In diesem Tutorial wird beschrieben, wie ein OAuth-Provider eines Drittanbieters zum Aufrufen des Oracle Integration-Ablaufs verwendet wird.
Architektur
Lassen Sie uns den Lösungsfluss visualisieren:
Der Prozess beginnt damit, dass der Benutzer oder die Geschäftsanwendung ein OAuth-Token aus der Microsoft Entra-ID erhält. Nach der Erfassung wird dieses Token verwendet, um den über OCI API Gateway angegebenen Endpunkt aufzurufen. Das OCI-API-Gateway, das für die Verwendung eines benutzerdefinierten Autorisierers OCI Functions (früher als Oracle Functions bezeichnet) konfiguriert ist, ruft diese Autorisiererfunktion zuerst auf, um das Token zu validieren. Nach erfolgreicher Validierung ruft er dann den tatsächlichen Backend-Endpunkt auf, der Oracle Integration-Ablauf ist.
Lassen Sie uns nun die Details der Implementierung dieses Prozesses untersuchen. Der Einfachheit halber werden wir es in drei Schritte aufteilen:
- Oracle Integration/Oracle Identity Cloud Service (IDCS)-Konfiguration.
- Implementierung von benutzerdefiniertem Autorisierer für OCI Functions.
- Konfiguration von OCI API Gateway.
Warum sollten Sie die Berechtigungstypen für Ressourceneigentümerkennwortzugangsdaten (ROPC) und JSON Web Token (JWT) verwenden, um Zugriffstoken von Microsoft Entra ID und OCI IAM abzurufen?
Die gemeinsame Verwendung von ROPC- und JWT-Assertion-Berechtigungen bietet einen optimierten und sicheren Ansatz für die Verarbeitung von Authentifizierung und Tokenaustausch in einer Multicloud-Umgebung.
-
ROPC-Berechtigung: Erfasst das anfängliche Zugriffstoken aus der Microsoft Entra-ID, indem direkt die Zugangsdaten des Ressourceneigentümers verwendet werden. Das Zugriffstoken enthält verschiedene Claims, die
upn
enthalten, das die eindeutige ID des authentifizierten Benutzers darstellt. Mit diesemupn
-Claim und einertrusted private key
wird eine Benutzer-Assertion generiert. -
JWT-Assertion-Berechtigung: Die Benutzer-Assertion wird dann direkt als Autorisierungsberechtigung verwendet, um ein Zugriffstoken aus der OCI-Identitätsdomain abzurufen. Dieses Zugriffstoken wird dann von OCI erkannt und ermöglicht einen nahtlosen Aufruf von Oracle Integration-Abläufen.
Zielgruppe
- OCI-IAM-Experten und Oracle Integration-Administratoren.
Ziele
-
Verwenden Sie ein OAuth 2.0-Token aus der Microsoft Entra-ID, um Oracle Integration-Abläufe aufzurufen.
Wir verwenden die ROPC-Berechtigung OAuth 2.0, um ein Zugriffstoken aus der Microsoft Entra-ID zu generieren. Wir verwenden OCI-Services, insbesondere OCI API Gateway und OCI Functions. Das OCI API Gateway fungiert als Frontend für unseren Oracle Integration-Endpunkt. Es unterstützt die Verwendung einer Autorisiererfunktion, um eine zusätzliche Authentifizierungsebene für APIs hinzuzufügen. Das bedeutet, dass wir Logik erstellen können, um das OAuth 2.0-Token aus der Microsoft Entra-ID zu validieren und dann mit dem JWT-Assertion-Berechtigungstyp in ein Token aus OCI IAM auszutauschen, sodass wir die Oracle Integration-Abläufe aufrufen können.
Voraussetzungen
-
OCI-Account: Admin-Zugriff auf Ihren OCI-Mandanten zur Verwaltung von Anwendungen.
-
Microsoft Entra-ID-Account: Admin-Zugriff auf Ihren Microsoft Entra-ID-Mandanten, um eine Anwendung zu registrieren.
-
Vertrautheit mit OCI-Services wie OCI-API-Gateway, OCI Functions, OCI IAM und Python.
-
Kenntnisse des OAuth 2.0 Authorization Framework
-
Eine vorhandene Oracle Integration.
-
Python 3.x installiert.
-
Erforderliche OCI-IAM-Policys:
-
Policy zum Erstellen der OCI-Funktion.
Allow group <group name> to use cloud-shell in compartment <function compartment> Allow group <group name> to manage repos in compartment <function compartment> Allow group <group name> to manage functions-family in compartment <function compartment> Allow group <group name> to use virtual-network-family in compartment <network compartment> Allow dynamic-group <dynamic group name> to use secret-family in compartment <vault compartment>
Hinweis: Die dynamische Gruppe wird in Aufgabe 2 erstellt, und OCI IAM-Berechtigungen sind breiter als ideal, wie in diesem Tutorial hervorgehoben. Sie sollten sich an die Grundsätze der geringsten Rechte halten und restriktivere Richtlinien durchsetzen.
-
Policy zum Erstellen des OCI-API-Gateway-Deployments.
Allow group <group name> to manage api-gateway-family in compartment <api gateway compartment> ALLOW any-user to use functions-family in compartment <function compartment> where ALL {request.principal.type= 'ApiGateway', request.resource.compartment.id = '<ocid of api gateway compartment id>'}
3. Policy for storing secrets in [OCI Vault](https://docs.oracle.com/en-us/iaas/Content/Identity/Concepts/commonpolicies.htm#sec-admins-manage-vaults-keys).
Allow group <group name> to use secret-family in compartment <vault compartment> Allow group <group name> to manage secret-family in compartment <vault compartment> Allow group <group name> to manage keys in compartment <vault compartment> Allow group <group name> to manage vaults in compartment <vault compartment>
Hinweis: Die Platzhalter
<group name>
,<dynamic group name>
,<api gateway compartment>
,<function compartment>
,<vault compartment>
und<ocid of api gateway compartment id>
müssen durch den tatsächlichen Gruppennamen, den dynamischen OCI-Gruppennamen, die Compartments, in denen OCI API Gateway, OCI Functions und OCI Vault bereitgestellt werden, und den Oracle Cloud-ID-(OCID-)Wert des OCI-API-Gateway-Compartments ersetzt werden. -
Aufgabe 1: Anwendung mit Microsoft Entra ID registrieren
Um die IAM-Funktionen von Microsoft Entra ID nutzen zu können, einschließlich des Zugriffs auf geschützte Ressourcen (Diagramm-APIs), müssen Sie eine Anwendung registrieren.
-
Anwendung registrieren. Weitere Informationen finden Sie unter Anwendung bei der Microsoft-Identitätsplattform registrieren.
-
Notieren Sie sich den Wert
Application (client) ID
im Abschnitt Überblick. -
Gehen Sie zu Verwalten, Zertifikate und Secrets, und fügen Sie ein Client Secret hinzu. Notieren Sie sich den Secret-Wert, der in einer späteren Aufgabe verwendet wird.
Aufgabe 2: Erforderliche Schritte für JWT-Benutzer-Assertion in OCI-Identitätsdomain
-
Führen Sie die erforderlichen Aufgaben hier aus: Voraussetzungen für JWT-Benutzer-Assertion.
-
Nachdem die Oracle Integration-Anwendung auf die erforderlichen Geltungsbereiche validiert wurde, werden selbstsignierte Schlüsselpaare generiert und eine vertrauliche Anwendung konfiguriert. Notieren Sie sich den Wert unter Geltungsbereich, private_key.pem, Client-ID und Client Secret.
Hinweis: Verwenden Sie beim Importieren des Private Keys als vertrauenswürdiger Partner in die vertrauliche Anwendung dieselbe
alias
wie beim Erstellen der selbstsignierten Schlüsselpaare, und notieren Sie sich bei späteren Aufgaben diealias
. -
Erstellen Sie eine dynamische Gruppe, damit der Ressourcentyp
function
aus einem bestimmten Compartment Secrets aus dem OCI Vault-Service lesen kann.
Aufgabe 3: Secrets in OCI Vault erstellen
Mit der Option Manuelle Secret-Generierung von OCI Vault können Sie die Secrets speichern, die aus Aufgabe 1 und Aufgabe 2 erfasst wurden. Weitere Informationen finden Sie unter Secret in einem Vault erstellen.
Nachdem die Secrets erstellt wurden, kopieren Sie den OCID-Wert aus dem Abschnitt Secret-Informationen, und speichern Sie ihn für spätere Aufgaben.
Aufgabe 4: Datei func.py
erstellen und konfigurieren
Wir verwenden OCI Functions als benutzerdefinierten Autorisierer, um das Zugriffstoken der Microsoft Entra-ID zu validieren und das OCI-IAM-Zugriffstoken als back_end_token
zu generieren.
-
Erstellen Sie zum Starten eine Anwendung. In OCI Functions ist eine Anwendung eine logische Gruppierung von Funktionen. Die Eigenschaften, die Sie für eine Anwendung angeben, bestimmen die Ressourcenzuweisung und -konfiguration für alle Funktionen in dieser Anwendung. Weitere Informationen finden Sie in Anwendungen erstellen.
-
Nachdem die Anwendung erstellt wurde, fügen Sie die Konfiguration der Anwendung hinzu. Wir holen die folgenden Elemente aus unserem Funktionscode ab und machen ihn tragbarer und konfigurierbarer, ohne den Code zu ändern. Geben Sie Schlüssel und Wert ein, und klicken Sie auf +.
Fügen Sie die Client-IDs aus der Microsoft Entra-ID, OCI-Identitätsdomains, die OCID der in Aufgabe 3 erfassten Secrets, den Alias, den aus Aufgabe 2 erfassten Geltungsbereich und einen Diagrammendpunkt
https://graph.microsoft.com/v1.0/me
hinzu, anhand dessen das Microsoft Entra-ID-Token validiert wird. -
Um die Funktion zu erstellen, gehen Sie zu Erste Schritte, und klicken Sie auf OCI Cloud Shell starten, um die interaktive Linux-cloud shell im Browser zu öffnen. Nachdem OCI Cloud Shell geladen wurde, können Sie die benutzerdefinierte Autorisierer-Oracle-Funktion direkt aus OCI Cloud Shell erstellen, entwickeln und bereitstellen.
-
Um die Funktion mit der Fn-Projektbefehlszeilenschnittstelle (CLI) zu erstellen, geben Sie den folgenden Befehl für eine Python-Funktion
fn init --runtime python MyCustomAuthorizer
ein, und klicken Sie auf Eingabetaste. -
Das Boilerplate der Funktion wird erstellt, jetzt kann es entsprechend bearbeitet werden, um die benutzerdefinierte Autorisiererlogik einzuschließen. Wechseln Sie zum Funktionsordner, und bearbeiten Sie die Datei
func.py
. Kopieren Sie das folgende Code-Snippet, und fügen Sie es ein.import io import json import logging import jwt import datetime from datetime import timedelta import time import base64 from fdk import response import requests from requests.auth import HTTPBasicAuth from cryptography.hazmat.primitives import serialization from cryptography.hazmat.backends import default_backend import ociVault oauth_apps = {} def initContext(context): # This method takes elements from the Application Context and from OCI Vault to create the OAuth App Clients object. if (len(oauth_apps) < 2): try: logging.getLogger().info("initContext: Initializing context") oauth_apps['idcs'] = {'introspection_endpoint': context['idcs_token_endpoint'], 'client_id': context['idcs_app_client_id'], 'scope':context['idcs_oauth_scope'], 'alias':context['alias'], 'client_secret': ociVault.getSecret(context['idcs_client_secret_ocid'])} oauth_apps['AD'] = {'token_endpoint': context['ad_endpoint'], 'client_id': context['ad_app_client_id'], 'client_secret': ociVault.getSecret(context['ad_client_secret_ocid'])} except Exception as ex: logging.getLogger().error("initContext: Failed to get config or secrets" + str(ex)) raise def getAuthContext(token, client_apps): # This method populates the Auth Context that will be returned to the gateway. auth_context = {} access_token = token[len('Bearer '):] jwtToken = json.loads(json.dumps(jwt.decode(access_token, options={"verify_signature": False}))) # Calling MSFT to validate the token try: logging.getLogger().info("getAuthContext: Calling Token Introspection function") respIntrospectToken = introspectToken(access_token, client_apps['AD']['token_endpoint'], client_apps['AD']['client_id'], client_apps['AD']['client_secret']) except Exception as ex: logging.getLogger().error("getAuthContext: Failed to introspect token" + str(ex)) raise # If AD confirmed the token valid and active, we can proceed to populate the auth context if (respIntrospectToken.status_code == 200): auth_context['active'] = True auth_context['principal'] = jwtToken['upn'] auth_context['scope'] = 'https://graph.microsoft.com/.default' # Retrieving the back-end Token backend_token = getBackEndAuthToken(client_apps['idcs']['introspection_endpoint'], client_apps['idcs']['client_id'], client_apps['idcs']['client_secret'],client_apps['idcs']['scope'],client_apps['idcs']['alias'],auth_context['principal']) # The maximum TTL for this auth is the lesser of the API Client Auth (Entra ID) and the Gateway Client Auth (OCI IAM) if (datetime.datetime.fromtimestamp(jwtToken['exp']) < (datetime.datetime.utcnow() + timedelta(seconds=backend_token['expires_in']))): auth_context['expiresAt'] = (datetime.datetime.fromtimestamp(jwtToken['exp'])).replace(tzinfo=datetime.timezone.utc).astimezone().replace(microsecond=0).isoformat() else: auth_context['expiresAt'] = (datetime.datetime.utcnow() + timedelta(seconds=backend_token['expires_in'])).replace(tzinfo=datetime.timezone.utc).astimezone().replace(microsecond=0).isoformat() # Storing the back_end_token in the context of the auth decision so we can map it to Authorization header using the request/response transformation policy auth_context['context'] = {'back_end_token': ('Bearer ' + str(backend_token['access_token']))} else: # API Client token is not active, so we will go ahead and respond with the wwwAuthenticate header auth_context['active'] = False auth_context['wwwAuthenticate'] = 'Bearer realm=\"identity.oraclecloud.com\"' return(auth_context) def introspectToken(access_token, introspection_endpoint, client_id, client_secret): # This method simply invokes the introspection api as configured in the configuration screen. # The real validation happens in the getAuthContext function. #payload = {'token': access_token} headers = {'Accept': 'application/json', 'Authorization':'Bearer '+access_token} try: logging.getLogger().info("introspectToken: Introspecting Token") resp = requests.get(introspection_endpoint, headers=headers) print(resp) except Exception as ex: logging.getLogger().error("introspectToken: Failed to introspect token" + str(ex)) raise return resp def getBackEndAuthToken(token_endpoint, client_id, client_secret, scope, alias, principal): # This method gets the token from the back-end system (ORDS in this case) try: logging.getLogger().info("getBackEndAuthToken: Getting Backend Token") print("Sub is " + principal) with open("private_key.pem", "rb") as key_file: private_key = serialization.load_pem_private_key( key_file.read(), password=None, backend=default_backend() ) headers = { "alg": "RS256", "typ": "JWT", "kid": "abc" } claims = { "sub": principal, "aud": "https://identity.oraclecloud.com/", "iss": client_id, "iat": int(time.time()), "exp": int(time.time()) + 3600, # 1 hour expiration "jti": "8c7df446-bfae-40be-be09-0ab55c655436" # random number } logging.getLogger().info("Claims : ") logging.getLogger().info(claims) jwt_assertion = jwt.encode( payload=claims, key=private_key, algorithm="RS256", headers=headers ) logging.getLogger().info("Assertion is :") logging.getLogger().info(jwt_assertion) encoded = client_id + ":" + client_secret baseencoded = base64.urlsafe_b64encode(encoded.encode('UTF-8')).decode('ascii') payload = {'grant_type': 'urn:ietf:params:oauth:grant-type:jwt-bearer', 'scope':scope, 'assertion':jwt_assertion} headers = {'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8', 'Authorization': 'Basic %s' % baseencoded, 'Accept': '*/*'} backend_token = json.loads(requests.post(token_endpoint, data=payload, headers=headers).text) logging.getLogger().info("Backend token in generated :") logging.getLogger().info(backend_token) except Exception as ex: logging.getLogger().error("getBackEndAuthToken: Failed to get ORDS token" + str(ex)) raise return backend_token def handler(ctx, data: io.BytesIO = None): initContext(dict(ctx.Config())) logging.getLogger().info(oauth_apps) auth_context = {} try: logging.getLogger().info("handler: Started Function Execution") gateway_auth = json.loads(data.getvalue()) auth_context = getAuthContext(gateway_auth['token'], oauth_apps) if (auth_context['active']): logging.getLogger().info('Authorizer returning 200...') return response.Response( ctx, response_data=json.dumps(auth_context), status_code = 200, headers={"Content-Type": "application/json"} ) else: logging.getLogger().info('Authorizer returning 401...') return response.Response( ctx, response_data=json.dumps(str(auth_context)), status_code = 401, headers={"Content-Type": "application/json"} ) except (Exception, ValueError) as ex: logging.getLogger().info('error parsing json payload: ' + str(ex)) return response.Response( ctx, response_data=json.dumps(str(auth_context)), status_code = 500, headers={"Content-Type": "application/json"} )
-
Importvorgänge
io
,json
,logging
,datetime
,time
,base64
: Standard-Python-Librarys für die Verarbeitung von I/O-, JSON-Daten, Logging-, Datums- und Uhrzeitvorgängen und base64-Codierung.jwt
: Bibliothek zur Codierung und Decodierung von JSON Web Tokens (JWT).requests
: Library zum Erstellen von HTTP-Anforderungen.HTTPBasicAuth
: Klasse zur Verarbeitung der HTTP-Basisauthentifizierung.serialization
,default_backend
: Aus der Kryptografiebibliothek, die zur Verarbeitung kryptografischer Vorgänge verwendet wird.ociVault
: Ein benutzerdefiniertes Modul für die Interaktion mit OCI Vault.
-
Globale Variable
oauth_apps:
-Dictionary zum Speichern der Anwendungskonfiguration.
-
Functions
-
initContext(context):
Zweck dieser Funktion ist es, die Anwendungskonfiguration mit den Kontextdaten und Secrets aus dem OCI Vault zu initialisieren. Er empfängt das Kontext-Dictionary-Objekt, das als erstes in der Haupt-Handler-Methode aufgerufen wird, und ruft die Secrets mit der in Aufgabe 5 erläuterten FunktiongetSecret()
aus OCI Vault ab. -
getAuthContext(token, client_apps):
Füllt den Authentifizierungskontext für das OCI-API-Gateway auf und gibt ihn zurück. Extrahiert und decodiert das Zugriffstoken. Ruft die FunktionintrospectToken()
auf, um das Token mit der Entra-ID zu validieren. Wenn das Token gültig ist, legt den Authentifizierungskontext fest, ruft die FunktiongetBackEndAuthToken()
auf, um das Backend-Token aus OCI IAM abzurufen, und legt die Ablaufzeit fest. Wenn das Token nicht gültig ist, wird der HeaderwwwAuthenticate
auf einen Authentifizierungsfehler gesetzt. -
introspectToken(access_token, introspection_endpoint, client_id, client_secret):
Validiert das Token mit dem angegebenenintrospection_endpoint
. Erstellt eine GET-Anforderung an den Introspektionsendpunkt mit dem Token. Gibt die Antwort vom Introspektions- oder Validierungsendpunkt zurück. Da die Microsoft Entra-ID keinen API-Endpunkt für die Introspektion OAuth aufweist, rufen wir den konfigurierten Endpunkt mit dem als Eingabe empfangenen Token auf. -
getBackEndAuthToken(token_endpoint, client_id, client_secret, scope, alias, principal):
Lädt den Private Key aus einer PEM-Datei. Erstellt JWT-Ansprüche und kodiert sie in einer JWT-Assertion. Bereitet die Payload und die Header für die Tokenanforderung vor. Erstellt eine POST-Anforderung an den Tokenendpunkt, um das Backend-Token abzurufen, und gibt das Backend-Token an die FunktiongetAuthContext()
zurück. -
handler(ctx, data: io.BytesIO = None):
Hauptfunktion zur Verarbeitung der Funktionsausführung. Initialisiert den Kontext OAuth mit der FunktioninitContext()
und ruft die FunktiongetAuthContext()
auf, um den Authentifizierungskontext abzurufen. Gibt eine 200-Antwort zurück, wenn das Token gültig ist. Andernfalls wird eine 401-Antwort zurückgegeben. Protokolliert und gibt bei Fehlern eine 500-Antwort zurück.
-
-
Aufgabe 5: Datei ociVault.py
erstellen und konfigurieren
Erstellen Sie eine ociVault.py
-Datei im selben Ordner, und fügen Sie das folgende Code-Snippet ein. Diese Utilityfunktion liest die Secrets aus dem OCI Vault-Service.
# Utility Function to get secrets from OCI Vault
import logging
import oci
import base64
def getSecret(ocid):
signer = oci.auth.signers.get_resource_principals_signer()
try:
client = oci.secrets.SecretsClient({}, signer=signer)
secret_content = client.get_secret_bundle(ocid).data.secret_bundle_content.content.encode('utf-8')
decrypted_secret_content = base64.b64decode(secret_content).decode('utf-8')
except Exception as ex:
logging.getLogger().error("getSecret: Failed to get Secret" + ex)
print("Error [getSecret]: failed to retrieve", ex, flush=True)
raise
return decrypted_secret_content
Hinweis: Behalten Sie die Datei
private_key.pem
aus Aufgabe 2 im selben Ordner bei.
Aufgabe 5: Funktion testen
Um die Funktion zu testen, müssen wir die Funktion bereitstellen und dann aufrufen, indem wir das Microsoft Entra ID-Token als Eingabe übergeben.
-
Navigieren Sie zum Funktionsordner, und führen Sie den folgenden Befehl
fn -v deploy --app MyCustomAuthorizer
aus, um ihn bereitzustellen. Der Fn-Projekt-CLI-Befehl erstellt die Funktion und stellt sie in der OCI Functions-Anwendung bereit.Hinweis: Nehmen Sie vor dem Deployment der Funktionsanwendung
fdk>=0.1.74
,requests
,oci
,pyjwt
,serialization
in die Dateirequirements.txt
auf. -
Generieren Sie ein Zugriffstoken aus der Microsoft Entra-ID mit dem OAuth 2.0 ROPC-Ablauf mit dem Postman-Client.
-
Notieren Sie sich das Zugriffstoken, um eine
payload.json
zu generieren, die als Eingabe zum Testen der OCI Functions übergeben wird. Speichern Sie die JSON-Datei im selben Funktionsverzeichnis. -
Nachdem Sie die Payload gespeichert haben, können Sie den folgenden Befehl ausführen, um die Ausführung der Funktion nachzuahmen, wie sie über das OCI-API-Gateway aufgerufen wird,
cat payload.json | fn invoke <AppName> <function name>
, wie in der folgenden Abbildung gezeigt.Wenn das Microsoft Entra-ID-Token gültig ist, wird eine Antwort wie in der folgenden Abbildung angezeigt. Dort wird der OCI-IAM-Tokenwert im Wert
back_end_token
der Kontextstruktur angezeigt.
Aufgabe 6: OCI API Gateway konfigurieren
OCI API Gateway ist eine vollständig verwaltete, skalierbare, cloudnative API-Managementplattform, die eine Suite von Services bietet, von der schnellen API-Bereitstellung bis hin zum Lebenszyklusmanagement und zur Integration von Backend-Services. Wir nutzen das API-Gateway, um die Autorisierung für Oracle Integration mit einem externen Identitätsprovider wie der Microsoft Entra ID zu vermitteln.
Erstellen Sie zunächst ein neues API-Gateway, und erstellen Sie dann ein neues Deployment im API-Gateway.
-
Navigieren Sie zu Entwicklerservices, API-Verwaltung und Gateways. Geben Sie die folgenden Informationen ein, und klicken Sie auf Gateway erstellen.
-
Klicken Sie auf der Seite Gatewaydetails auf Deployment erstellen, und geben Sie die folgenden erforderlichen Informationen für Ihr API-Deployment ein.
- Name: Geben Sie einen Namen ein.
- Pfadpräfix: Definieren Sie den Pfad.
- Compartment: Wählen Sie das entsprechende Compartment für Ihr API-Deployment aus.
-
Fügen Sie die Details der Authentifizierungs-Policy hinzu. Hier konfigurieren Sie die OCI Functions, die als benutzerdefinierter Autorisierer aufgerufen werden soll. Wählen Sie die in Aufgabe 4 erstellte Funktion aus.
-
Konfigurieren Sie auf der Seite Routen das API-Routing zum Backend-Service. In diesem Tutorial definieren wir das Routing zum Oracle Integration-Endpunkt.
-
Klicken Sie auf Routenanforderungs-Policys anzeigen. Hier führt der Benutzer den Swap von Authentifizierungstoken aus der OCI Functions-Antwort an den Authentifizierungsheader der Anforderung aus.
In diesem Schritt wird das Authentifizierungstoken für den Backend-Service basierend auf dem Backend-Identitätsprovider festgelegt. In unserem Szenario legen wir das Bearer-Token für OCI IAM so fest, wie es vom benutzerdefinierten Autorisierer OCI Functions empfangen wurde. Hier konfigurieren wir den Autorisierungsheader so, dass er mit dem Wert
${request.auth[back_end_token]}
überschrieben wird. Beachten Sie, dassback_end_token
Teil des Kontextes in der Antwortstruktur der Oracle-Funktion ist. Stellen Sie sicher, dass dieser Ausdruck erfolgreich ausgewertet wird, nachdem der benutzerdefinierte Autorisierer OCI Functions abgeschlossen ist. -
Nachdem Sie die Konfiguration erfolgreich geprüft haben, klicken Sie auf Änderungen speichern, um das Deployment zu speichern, und warten Sie, bis der Deployment-Status in Aktiv geändert wird.
Nachdem Sie das API-Deployment aktiviert haben, kopieren Sie den Endpunkt (Basis-URL) aus dem Abschnitt Deployment-Informationen. Diese URL dient als Endpunkt für Ihr Deployment, bei dem der Geschäftsprozess oder die Anwendung die Oracle Integration-Endpunkte mit dem Microsoft Entra ID-Bearer-Token aufruft. Die Basis-URL wird in der nächsten Aufgabe verwendet.
Aufgabe 7: API testen
Rufen Sie zunächst mit dem Postman-Client ein Zugriffstoken von Microsoft Entra ID ab. Wir verwenden den ROPC-Ablauf, um sicherzustellen, dass das Zugriffstoken die erforderlichen Identitätsinformationen enthält.
-
Kopieren Sie das Zugriffstoken, da es beim Aufrufen der API aus dem API-Gateway verwendet wird.
-
Erstellen Sie eine neue REST-Anforderung mit einer Basisendpunkt-URL, die in Aufgabe 6 aus dem API-Gateway und dem Oracle Integration-Endpunkt kopiert wurde, wie in der folgenden Abbildung dargestellt. Verwenden Sie das Bearer-Token im Anforderungsheader.
-
Klicken Sie auf Senden, um die API-Anforderung aufzurufen. Dabei wird Oracle Integration ausgeführt und eine erfolgreiche Ausgabe ausgegeben.
Nächste Schritte
Die API in Oracle API Gateway wurde erfolgreich mit einem OAuth-Token aus der Microsoft Entra-ID aufgerufen und erhielt eine Antwort vom Oracle Integration-REST-Triggerablauf. Diese Integration ist entscheidend für Kunden, die digitale Services über verschiedene Cloud-Anbieter hinweg verbinden.
Verwandte Links
-
Policys erstellen, um den Zugriff auf Netzwerk- und Funktionsressourcen zu kontrollieren
-
Policys für die Kontrolle des Zugriffs auf Netzwerk- und API-Gatewaybezogene Ressourcen erstellen
-
Verwalten von Vaults, Schlüsseln und Secrets durch Sicherheitsadministratoren zulassen
-
Anwendung bei der Microsoft-Identitätsplattform registrieren
-
Auf andere Oracle Cloud Infrastructure-Ressourcen aus aktiven Funktionen zugreifen
-
Microsoft-Identitätsplattform und OAuth 2.0-Kennwortzugangsdaten des Ressourceneigentümers
Danksagungen
- Autor - Gautam Mishra (Principal Cloud Architect)
Weitere Lernressourcen
Sehen Sie sich andere Übungen zu docs.oracle.com/learn an, oder greifen Sie im Oracle Learning YouTube-Channel auf weitere kostenlose Lerninhalte zu. Besuchen Sie außerdem education.oracle.com/learning-explorer, um Oracle Learning Explorer zu werden.
Die Produktdokumentation finden Sie im Oracle Help Center.
Securely Access Oracle Integration using Access Tokens from Microsoft Entra ID
G13110-01
August 2024