OAuth-JWT-API-Endpunkt für externe Clients erstellen (Computer-zu-Computer-Integration)
Mit dem OAuth-JWT-Bearer-Token können sich Client-Webanwendungen nahtlos mit dem eingehenden JWT-Gewährungstyp bei Ihrer Instanz authentifizieren, anstatt dass der Endanwender sich manuell anmelden oder das Passwort freigeben muss.
Bevor Sie beginnen
Die unterstützten Algorithmen für JSON Web Token (JWT): RS256, RS384, RS512, ES256, ES384, ES512.
Generieren Sie ein JWT mit den folgenden Ansprüchen auf Clientseite:
aud: Muss mit dem Wert der Client-ID übereinstimmen.Untergeordnet: Muss ein Anwenderbezeichner sein, z. B. die E-Mail-Adresse des Anwenders, der Sie das Token zuordnen möchten.iss: Empfohlene Übereinstimmung mit dem Wert der Client-ID. WennaudUndissStimmt nicht überein, fügen Sie dann hinzuissWert in der Anspruchsvalidierung.Verwendbar bis: Beliebiger gewünschter Ablauf.
Konfiguration in ServiceNow
Warum und wann dieser Vorgang ausgeführt wird
Erforderliche Rolle: Administrator
Weitere Informationen zu JSON-Webtoken finden Sie unter https://jwt.io/.
Prozedur
- Fügen Sie den öffentlichen Schlüssel der Client-App zu hinzu sys_certificate Tabelle.
-
Richten Sie die Konfiguration in ein ServiceNow Instanz zur Verifizierung des eingehenden JWT.
- Navigieren zu System-OAuth > Applikationsregistrierungan.
- Wählen Sie Aus Erstellen Sie einen OAuth-JWT-API-Endpunkt für externe Clients .
-
Füllen Sie das Formular mit Informationen zu Ihrem Token aus.
Tabelle : 1. OAuth-JWT-Tabelle Feld Beschreibung Name Ein eindeutiger Name, der die Anwendung identifiziert, für die Sie JWT OAuth-Zugriff benötigen. Client-ID Die automatisch generierte eindeutige ID der Anwendung. Das System verwendet den Wert dieses Felds, um den öffentlichen oder freigegebenen Schlüssel abzurufen und das JWT zu validieren. Der Wert dieses Felds muss mit dem Wert der Ansprüche des Ausstellers und der Zielgruppe in JWT übereinstimmen. Geheimer Clientschlüssel Die Zeichenfolge des gemeinsamen Geheimnisses, die sowohl die Instanz als auch die Client-Anwendung oder -Website verwenden, um Kommunikation miteinander zu autorisieren. Lassen Sie dieses Feld leer, damit die Instanz automatisch ein geheimes Clientgeheimnis generiert. Um vorhandene geheime Clientgeheimnisse anzuzeigen, wählen Sie das Sperrsymbol aus. Hinweis:Wenn Öffentlicher Client Ist ausgewählt, können Sie auslassen Geheimer Client-Schlüssel .Anwenderfeld Feld in der Anwendertabelle (sys_user), das das System verwendet, um den Wert des Antragstellungsanspruchs in der JWT abzugleichen. Wenn Sie beispielsweise ein Token hinzufügen, das den Anspruchswert des Antragstellers user.name@example.com hat, legen Sie fest Anwenderfeld Bis E-Mail . Dieses Feld weist das System an, das E-Mail-Feld nach dem Wert user.name@example.com zu durchsuchen und den übereinstimmenden Anwenderdatensatz in der eingehenden Anforderung zu verwenden. JTI-Verifizierung aktivieren Wählen Sie diese Option aus, um bei jedem Tokenaustausch ein neues Token anzufordern. Standard: Ausgewählt.
Anwendung Schreibgeschützter Anwendungsbereich. Dieses Feld wird automatisch gefüllt. Zugänglich von Bereichsübergreifende Zugriffsrichtlinie. Weitere Informationen finden Sie unter Einstellungen für Anwendungszugriff . Lebensdauer von Zugriffstoken Zeitraum, für den das Token gültig ist. Einheit: Sekunden
Tokenformat Format des zu generierenden Tokens. Das Format bestimmt die Struktur eines Tokens und die darin enthaltenen Informationen. Subjektanspruch Feld in der Anwendertabelle (sys_user), das zum Ausfüllen des Werts des Betreffanspruchs eines JWT-Tokens verwendet wird. Der Unteranspruch ist eine Information, die den Betreff oder Anwender des JWT-Tokens identifiziert. Dieses Feld gilt nur, wenn Token-Format Ist JWT. Taktversatz Zulässige Zeitdifferenz zwischen Server- und Client-Uhren bei der Validierung von Verwendbar bisUndnbfAnsprüche im JWT.Einheit: Sekunden
Standard: 300
Tokenbeschränkungen erzwingen Wählen Sie diese Option aus, um nur Token für die Verwendung mit APIs zu aktivieren, die festgelegt sind, um das Authentifizierungsprofil zu aktivieren. Sie können Zugriffsgewährung mithilfe einer API-Zugriffsrichtlinie festlegen. Weitere Informationen finden Sie unter Erstellen Sie EINE REST-API-Zugriffsrichtlinie . Standard: Nicht Ausgewählt.
Kommentare Die der Anwendung zuzuordnenden Informationen. Öffentlicher Client Fügen Sie dieses Feld dem Formular hinzu, wenn der JWT-Client öffentlich ist. Wenn diese Option ausgewählt ist, müssen Sie keinen einschließen Geheimer Client-Schlüssel . Standard: Nicht Ausgewählt.
Client-Typ Wählen Sie den Client-Typ basierend auf dem Typ Ihres Clients aus. Optionen: - IFrame eingebettet
- Integration als Anwender
- Integration als Service
- Speichern Sie das Formular.
-
Fügen Sie der zugehörigen Liste „JWT-Verifiziererzuordnungen“ Datensätze hinzu, um die JWT-Signatur zu überprüfen.
Tabelle : 2. Tabelle „JWT-Verifiziererzuordnungen“ Feld Beschreibung Name Name des JWT-Zuordnungsdatensatzes. Kind Schlüssel-ID aus JWT. Freigegebener Schlüssel Der freigegebene Schlüssel für die angegebene Schlüssel-ID. Anwendung Schreibgeschützter Anwendungsbereich. Sys-Zertifikat Zertifikatdatensatz in der Tabelle „X.509-Zertifikate“ (sys_certificate). Das Zertifikat, das in Schritt 1 hochgeladen wurde. -
Fügen Sie der zugehörigen Liste „OAuth-JWT-Anspruchsvalidierungen“ alle anwenderdefinierten Ansprüche hinzu, die Ihrem JWT zugeordnet sind.
Sie müssen keine Datensätze für die folgenden erforderlichen Ansprüche hinzufügen:
- iss
- aud
- Untergeordnet
- exp
Hinweis:- Wenn
audUndissStimmt nicht überein, fügen Sie dann hinzuissWert in der Anspruchsvalidierung. - Für Zertifikate können Sie mehrere Überprüfungszuordnungen hinzufügen, die mehreren Schlüsseln zugeordnet sind.
Tabelle : 3. Tabelle „OAuth-JWT-Anspruchsvalidierungen“ Feld Beschreibung Mein externer Client Wird automatisch mit dem OAuth-JWT-Datensatz ausgefüllt. Anspruchwerttyp Datentyp des Anspruchswerts. Anspruchname Name des Anspruchs, den Sie hinzufügen möchten. Anspruchwert Wert des Anspruchs. Anwendung Schreibgeschützter Anwendungsbereich.
-
Senden Sie eine Curl-Anforderung mit dem JWT-Token, um ein Zugriffstoken von Ihrer Instanz zu erhalten.
Es folgt ein Beispiel für einen Curl-Befehl, der ein Zugriffstoken anfordert:
$ curl -d"grant_type= urn:ietf:params:oauth:grant-type:jwt-bearer &client_id=be3aeb583ace210011c15b24a43e25d8 &client_secret=client_password &assertion= eyJraWQiOiJzYW1wbGVrZXlpZCIsInR5cCI6IkpXVCIsImFsZyI6IlJTMjU2In0.eyJhdWQiOiI5YzZlMmQxNzU0MzMyMDEwMDFhMTE4Y2FhMGVhMmE0MyIsInN1YiI6ImFkbWluQGV4YW1wbGUuY29tIiwiaXNzIjoiOWM2ZTJkMTc1NDMzMjAxMDAxYTExOGNhYTBlYTJhNDMiLCJleHAiOjE2MjI3MDI1MjYsImlhdCI6MTYyMjcwMjQ2NiwianRpIjoiNWRkMGUxYzctYjY1Ny00YmQ4LTlkY2UtMTdhZDdlZmUwNmFiIn0.PDoffnN2nq9ZNdxhOTLNbzlls4C1gsacahWr0kmPcGJDUJ_OQunmY5YXfpqkASiZixcQDS4kMwyqK9bha1-SnPOXq7zCIlJGCGFOv_OjEpQvMqmiKtLVk3jCsD03eXSoR4V-EzoCChiXpK87K5tMfM5k0YV9KfrxgvjUipgfni5N0JeyqkssMXBdkuE90XW_hBCo9AMMQm6J2PNMWb2O_O8rOX06KHuc4-Ip8wcRZ8a_bndCSmHl8Em7v4DvqTkLzlnF_-BXuM3T7nTI21cDXQKqZnqzzriu8irlAsscJFTxkh-_Ynei5RgYtL_Mvx2-HDO-XGofBhlAY2t9K36sz71HHqFZr5qCOIOAPguNzAy5-MOuZjOU_kH6ugIRycaNMDRjaU7gOvUHEERw3d0sI20OChIWOryBSwdTs7lgB1WzsJWCNVo81ssc2yko3jPoygt90tMwI_6A-4J-mlgq_fS_SvPUAqq_2UUJfVOTT5WGeq58cXfwRJmsDo49IhL3kXDVWT2gxaqhEdBQEW16UmRoTUzRs9A9sOm18y3skmOVtnEOm-MlJMFQZ754UMzbiH0ZsMmk1ivCGIjex5J0_lDjKElWF5RHGz3YShCoa4JKDZsqYMvIk1SvzyQXjuFqPdS2vzg2m1eKGUwr3m6uNs_HflcDystwVdMZ7nLlBG4" https://instancename.service-now.com/oauth_token.doWenn der JWT-Client ein öffentlicher Client ist, z. B. das Mobile SDK, können Sie die Parameter „Client_ID“ und „Client_Secret“ aus der Anforderung auslassen. Es folgt ein Beispiel für einen Curl-Befehl, der ein Zugriffstoken anfordert, das Client_ID und Client_Secret auslässt:
$ curl -d"grant_type= urn:ietf:params:oauth:grant-type:jwt-bearer &assertion= eyJraWQiOiJzYW1wbGVrZXlpZCIsInR5cCI6IkpXVCIsImFsZyI6IlJTMjU2In0.eyJhdWQiOiI5YzZlMmQxNzU0MzMyMDEwMDFhMTE4Y2FhMGVhMmE0MyIsInN1YiI6ImFkbWluQGV4YW1wbGUuY29tIiwiaXNzIjoiOWM2ZTJkMTc1NDMzMjAxMDAxYTExOGNhYTBlYTJhNDMiLCJleHAiOjE2MjI3MDI1MjYsImlhdCI6MTYyMjcwMjQ2NiwianRpIjoiNWRkMGUxYzctYjY1Ny00YmQ4LTlkY2UtMTdhZDdlZmUwNmFiIn0.PDoffnN2nq9ZNdxhOTLNbzlls4C1gsacahWr0kmPcGJDUJ_OQunmY5YXfpqkASiZixcQDS4kMwyqK9bha1-SnPOXq7zCIlJGCGFOv_OjEpQvMqmiKtLVk3jCsD03eXSoR4V-EzoCChiXpK87K5tMfM5k0YV9KfrxgvjUipgfni5N0JeyqkssMXBdkuE90XW_hBCo9AMMQm6J2PNMWb2O_O8rOX06KHuc4-Ip8wcRZ8a_bndCSmHl8Em7v4DvqTkLzlnF_-BXuM3T7nTI21cDXQKqZnqzzriu8irlAsscJFTxkh-_Ynei5RgYtL_Mvx2-HDO-XGofBhlAY2t9K36sz71HHqFZr5qCOIOAPguNzAy5-MOuZjOU_kH6ugIRycaNMDRjaU7gOvUHEERw3d0sI20OChIWOryBSwdTs7lgB1WzsJWCNVo81ssc2yko3jPoygt90tMwI_6A-4J-mlgq_fS_SvPUAqq_2UUJfVOTT5WGeq58cXfwRJmsDo49IhL3kXDVWT2gxaqhEdBQEW16UmRoTUzRs9A9sOm18y3skmOVtnEOm-MlJMFQZ754UMzbiH0ZsMmk1ivCGIjex5J0_lDjKElWF5RHGz3YShCoa4JKDZsqYMvIk1SvzyQXjuFqPdS2vzg2m1eKGUwr3m6uNs_HflcDystwVdMZ7nLlBG4" https://instancename.service-now.com/oauth_token.doDie Instanz gibt das Zugriffstoken in ihrer Antwort zurück:
{ "access_token": "KynMY2H0uwWkRc8g8YLXjnQxWbH5_wbnSiLsnaOoKw61GZkkV0ytZP74uF7hJyjfsWfaaFijqQzq2kcABNJxNA", "scope": "useraccount", "token_type": "Bearer", "expires_in": 1799 }Hinweis:Der eingehende JWT-Gewährungstyp enthält keine Aktualisierungstoken. -
Führen Sie einen REST-API-Aufruf durch, um mit dem Zugriffstoken auf eine Ressource zuzugreifen.
Im Folgenden finden Sie einen Curl-Befehl, um mit dem Token auf die Incident-Tabelle zuzugreifen.
$ curl -H "Authorization: Bearer KynMY2H0uwWkRc8g8YLXjnQxWbH5_wbnSiLsnaOoKw61GZkkV0ytZP74uF7hJyjfsWfaaFijqQzq2kcABNJxN" https://instancename.service-now.com/api/now/v1/table/incident