Workflow zur Autorisierungscodegewährung
Die OAuth-Autorisierungscodegewährung ist ein sicherer und weit verbreiteter Flow für Web-, Mobile- oder Desktop-Apps, die mit Zustimmung des Anwenders auf Anwenderdaten zugreifen. Es unterstützt sowohl private Clients (mit einem geheimen Client) als auch öffentliche Clients (mit PKCE).
Vorbereitungen
Erforderliche Rolle: oauth_admin, mi_admin, admin
Warum und wann dieser Vorgang ausgeführt wird
Diese Themensammlung enthält Informationen dazu, wie eine Client-Anwendung den Flow Autorisierungscode-Gewährung verwenden kann, um ein Token von ServiceNow abzurufen und API-Aufrufe mit diesem Token durchzuführen. Private Clients verwenden das geheime Clientgeheimnis, während öffentliche Clients die PKCE-Code-Challenge verwenden.
Prozedur
-
Melden Sie sich über die Client-Anwendung an.
Der Anwender beginnt den Anmeldevorgang über die Client-Anwendungsschnittstelle.
-
Initiieren Sie die Autorisierungsanforderung.
Der Client leitet den Anwender zum ServiceNow-Autorisierungs-Endpunkt um. Die Methode zum Initiieren der Autorisierungsanforderung hängt vom Typ des Clients ab: Öffentlich oder privat.
- Öffentliche Clients
-
Öffentliche Clients (Beispiel: Mobile oder einseitige Anwendungen) können kein geheimes Clientgeheimnis sicher speichern. Daher müssen sie verwenden Nachweisschlüssel für Codeaustausch (PKCE) Um die Sicherheit zu verbessern.
- Fügen Sie in die Autorisierungsanforderung ein PKCE-Code-Herausforderung Und geben Sie an Code-Abfragemethode .
- Während der Tokenanforderung muss der Client den senden Codeverifizierer Dient zum Validieren des Autorisierungscodes.
- Führen Sie eine GET-Anforderung an den Autorisierungsendpunkt mit den folgenden Parametern aus:
Method: GET Endpoint: https://<servicenow_base_url>/oauth_auth.doTabelle : 1. Autorisierungsanforderungsparameter (öffentlicher Client – PKCE) Parameter Erforderlich Beschreibung Response_typeJa Legen Sie den Wert auf fest CodeZum Initiieren des Autorisierungscode-Flows.client_idJa Der eindeutige Bezeichner für Ihre Client-Anwendung. FORMAT: YOUR_CLIENT_ID
Umleiten_URIJa Der URI, an den ServiceNow den Autorisierungscode sendet. Beispiel: https://yourapp.com/callback
Code_ChallengeJa Ein base64url-codierter SHA-256-Hash des Codeverifizierers. Dies wird als Teil des PKCE-Flows verwendet. Code_Challenge_methodJa Gibt die für die Codeabfrage verwendete Transformationsmethode an. Auf festlegen S256.scopeOptional Eine durch Leerzeichen getrennte Liste der angeforderten Bereiche. Beispiel:
Incident_read Incident_write.stateJa Ein vom Client generierter Wert, der zur Vermeidung von CSRF-Angriffen verwendet wird. Der Wert wird im Umleitungs-URI unverändert zurückgegeben, sodass der Client ihn validieren kann. Hinweis:Ab Madrid-Release die SystemeigenschaftGlide.oauth.State.Parameter.erforderlichSchreibt die Verwendung von vorstatusParameter in den OAuth-Anforderungen. DiestatusEigenschaft ist auf festgelegtWahrStandardmäßig in den neuen Instanzen undOptionalIn aktualisierten Instanzen. Falls fehltstatusParameter, die Autorisierungsanforderung schlägt fehl, und der folgende Fehler wird angezeigt:Fehlender Statusparameter in Anforderung. - Private Clients
-
Private Clients (Beispiel: Serverseitige Anwendungen) können ein geheimes Clientgeheimnis sicher speichern und erfordern keine PKCE.
- Die Autorisierungsanforderung wird initiiert, indem der Anwender zum Autorisierungsendpunkt umgeleitet wird. Es ist keine geheime Clientcodeabfrage oder PKCE-Code erforderlich In diesem Schritt.
- Während der Tokenanforderung enthält der Client den Geheimer Clientschlüssel Zusammen mit Autorisierungscode Um das Zugriffstoken zu erhalten.
- Führen Sie eine GET-Anforderung an den Autorisierungsendpunkt mit den folgenden Parametern aus:
Method: GET Endpoint: https://<servicenow_base_url>/oauth_auth.doTabelle : 2. Autorisierungsanforderungsparameter (Private Client-Secret) Parameter Erforderlich Beschreibung Response_typeJa Legen Sie den Wert auf fest CodeZum Initiieren des Autorisierungscode-Flows.client_idJa Der eindeutige Bezeichner für Ihre Client-Anwendung. FORMAT: YOUR_CLIENT_ID
Umleiten_URIJa Der URI, an den ServiceNow den Autorisierungscode sendet. Beispiel: https://yourapp.com/callback
scopeOptional Eine durch Leerzeichen getrennte Liste der angeforderten Bereiche. Beispiel:
Incident_read Incident_write.stateJa Ein vom Client generierter Wert, der verwendet wird, um Site-übergreifende Angriffe auf Anforderungsfälschung (CSRF) zu vermeiden. Der Wert wird im Umleitungs-URI unverändert zurückgegeben, sodass der Client ihn validieren kann.
-
Melden Sie sich an, und gewähren Sie die Zugriffseinwilligung für die Client-Anwendung.
Melden Sie sich bei an ServiceNow(Oder IdP, wenn SSO aktiviert ist) und gewähren Sie die Zugriffseinwilligung für die Clientanwendung.
-
ServiceNow(Oder IdP, wenn SSO aktiviert ist) validiert die Anmeldeinformationen und ServiceNow Gibt einen Autorisierungscode an den Client zurück.
Nach der erfolgreichen Authentifizierung wird der Browser zu weitergeleitet
Umleiten_URI, Und der Autorisierungscode ist in der Abfragezeichenfolge enthalten:https://yourapp.com/callback?code=AUTH_CODE&state=xyz123 -
Initiieren Sie die Autorisierungsanforderung.
Der Client leitet den Anwender für ein Zugriffstoken zum ServiceNow-Autorisierungs-Endpunkt um. Die Methode zum Initiieren der Autorisierungsanforderung hängt vom Typ des Clients ab: Öffentlich oder privat.
- Öffentliche Clients
-
Öffentliche Clients (Beispiel: Mobile oder einseitige Anwendungen) können kein geheimes Clientgeheimnis sicher speichern. Daher müssen sie verwenden Nachweisschlüssel für Codeaustausch (PKCE) Um die Sicherheit zu verbessern.
- Fügen Sie in die Autorisierungsanforderung ein PKCE-Code-Herausforderung Und geben Sie an Code-Abfragemethode .
- Während der Tokenanforderung muss der Client den senden Codeverifizierer Dient zum Validieren des Autorisierungscodes.
- Der Client sendet eine POST-Anforderung an den Token-Endpunkt mit den folgenden Parametern:
Method: POST Endpoint: https://<servicenow_base_url>/oauth_token.do Headers: Content-Type: application/x-www-form-urlencodedTabelle : 3. Token-Anforderungsparameter (öffentlicher Client-PKCE) Parameter Erforderlich Beschreibung Grant_typeJa Legen Sie den Wert auf fest Authorization_CodeUm den Code gegen ein Token auszutauschen.CodeJa Der vom Autorisierungsendpunkt empfangene Autorisierungscode. Umleiten_URIJa Der in der anfänglichen Autorisierungsanforderung verwendete URI. Beispiel: https://yourapp.com/callback
client_idJa Der eindeutige Bezeichner für Ihre Client-Anwendung. Code_VerifierJa Die ursprüngliche Zeichenfolge, die zum Generieren der PKCE verwendet wird Code_Challenge.stateJa Ein vom Client generierter Wert, der verwendet wird, um CSRF-Angriffe zu verhindern. Der Wert wird im Umleitungs-URI unverändert zurückgegeben, sodass der Client ihn validieren kann. - Private Clients
-
Private Clients (Beispiel: Serverseitige Anwendungen) können ein geheimes Clientgeheimnis sicher speichern und erfordern keine PKCE.
- Die Autorisierungsanforderung wird initiiert, indem der Anwender zum Autorisierungsendpunkt umgeleitet wird. Es ist keine geheime Clientcodeabfrage oder PKCE-Code erforderlich In diesem Schritt.
- Während der Tokenanforderung enthält der Client den Geheimer Clientschlüssel Zusammen mit Autorisierungscode Um das Zugriffstoken zu erhalten.
- Führen Sie eine POST-Anforderung an den Autorisierungsendpunkt mit den folgenden Parametern aus:
Method: POST Endpoint: https://<servicenow_base_url>/oauth_token.do Headers: Content-Type: application/x-www-form-urlencodedTabelle : 4. Token-Anforderungsparameter (Privater Client-Client-Geheimschlüssel) Parameter Erforderlich Beschreibung Grant_typeJa Legen Sie den Wert auf fest Authorization_CodeUm den Code gegen ein Token auszutauschen.CodeJa Der vom Autorisierungsendpunkt empfangene Autorisierungscode. Umleiten_URIJa Der in der anfänglichen Autorisierungsanforderung verwendete URI. Beispiel: https://yourapp.com/callback
client_idJa Der eindeutige Bezeichner für Ihre Client-Anwendung. client_secretJa Das Geheimnis des Clients, das zur Authentifizierung beim Token-Endpunkt verwendet wird. stateJa Ein vom Client generierter Wert, der verwendet wird, um CSRF-Angriffe zu verhindern. Der Wert wird im Umleitungs-URI unverändert zurückgegeben, sodass der Client ihn validieren kann.
-
Greifen Sie auf zu ServiceNow APIs mit dem Zugriffstoken.
- Beispiel:
- Stellen Sie mithilfe des Zugriffstoken eine GET-Anforderung an die APIs. Schließen Sie das Zugriffstoken in ein
AutorisierungHeader.
Method: GET End Point: https://<servicenow_base_url>/api/now/incident Authorization: Bearer YOUR_ACCESS_TOKEN -
Verlängern Sie das Zugriffstoken, wenn es abgelaufen ist.
Stellen Sie eine POST-Anforderung, um das Zugriffstoken (nur private Clients) mit den folgenden Parametern zu aktualisieren:
Method: POST Endpoint: https://<servicenow_base_url>/oauth_token.do Headers: Content-Type: application/x-www-form-urlencodedTabelle : 5. Token-Anforderungsparameter Aktualisieren (Privater Client) Parameter Erforderlich Beschreibung Grant_typeJa Legen Sie den Wert auf fest REFRESH_TokenUm ein neues Zugriffstoken anzufordern.REFRESH_TokenJa Das Aktualisierungstoken, das zuvor vom Token-Endpunkt ausgegeben wurde. client_idJa Der eindeutige Bezeichner für Ihre Client-Anwendung. client_secretJa Das geheime Clientgeheimnis, das zur Authentifizierung beim Token-Endpunkt verwendet wird.