Workflow d’octroi de code d’autorisation
ServiceNow® gère à la fois l’authentification et l’accès à l’API en agissant en tant que serveur d’autorisation et de ressources. Lorsque l’authentification unique (SSO) est activée, elle redirige les utilisateurs vers l’IdP configuré pour l’authentification et émet des jetons après la connexion.
Avant de commencer
Rôle requis : oauth_admin, mi_admin, admin
Pourquoi et quand exécuter cette tâche
Cette collection de rubriques fournit des informations sur la façon dont ServiceNow gère l’authentification et l’accès à l’API lorsqu’ils agissent à la fois en tant que serveur d’autorisation et en tant que serveur de ressources. Il décrit le comportement lorsque SSO est activé, y compris la redirection vers le fournisseur d’identité (IdP) pour l’authentification utilisateur et l’émission d’un code ServiceNow d’autorisation après authentification réussie. L’utilisation du code d’autorisation garantit que ServiceNow vous conserve le contrôle sur l’émission des jetons et l’accès aux ressources protégées.
Procédure
-
Connectez-vous à partir de l’application cliente.
L’utilisateur commence le processus de connexion à partir de l’interface de l’application cliente.
-
Lancez la demande d’autorisation.
Le client redirige l’utilisateur vers ServiceNow le point de terminaison d’autorisation pour initier la demande d’autorisation. La demande d’autorisation peut être initiée en incluant le
secret clientou lacontestation de code PKCEdans le corps de la demande, en fonction du type de client (privé ou public). Dans le corps de la demande d’autorisation, incluez lesecret clientpour les clients privés etPKCE Code Challengepour les clients publics.- Pour les clients privés
Incluez le secret clientdans le corps de la demande, lors de l’initiation de la demande de jeton pour les clients privés. Suivez la procédure pour initier la demande d’autorisation à l’aide dusecret clientpour les clients privés.- Effectuez une demande GET au point de terminaison d’autorisation avec les paramètres suivants :
Method: GET Endpoint: https://<servicenow_base_url>/oauth_auth.doTableau 1. Paramètres de demande d’autorisation (secret du client privé) Paramètre Obligatoire Description response_typeOui Définissez la valeur sur codepour lancer le flux de code d’autorisation.client_idOui L’identificateur unique pour votre application cliente. Format : YOUR_CLIENT_ID
redirect_uriOui L’URI auquel ServiceNow envoie le code d’autorisation. Exemple : https://yourapp.com/callback
périmètreOui Une liste de champs d’application demandés séparés par des espaces. Exemple :
incident_read incident_write.ÉtatOui Valeur générée par le client et utilisée pour éviter les attaques de contrefaçon de requête intersite (CSRF). La valeur est renvoyée inchangée dans l’URI de redirection, ce qui permet au client de la valider - Pour les clients publics
- Incluez le
PKCE Code Challengedans le corps de la demande, lors du lancement de la demande de jeton pour les clients publics. Suivez la procédure pour initier la demande d’autorisation à l’aide duDéfi de code PKCEpour les clients publics. - Effectuez une demande GET au point de terminaison d’autorisation avec les paramètres suivants :
Method: GET Endpoint: https://<servicenow_base_url>/oauth_auth.doTableau 2. Paramètres de demande d’autorisation (Client public : PKCE) Paramètre Obligatoire Description response_typeOui Définissez la valeur sur codepour lancer le flux de code d’autorisation.client_idOui L’identificateur unique pour votre application cliente. Format : YOUR_CLIENT_ID
redirect_uriOui L’URI auquel ServiceNow envoie le code d’autorisation. Exemple : https://yourapp.com/callback
code_challengeOui Hachage SHA-256 encodé en base64url du vérificateur de code. Ceci est utilisé dans le cadre du flux PKCE. code_challenge_methodOui Spécifie la méthode de transformation utilisée pour le test de code. Réglez sur S256.périmètreOui Une liste de champs d’application demandés séparés par des espaces. Exemple :
incident_read incident_write.ÉtatOui Une valeur générée par le client utilisée pour éviter les attaques CSRF. La valeur est renvoyée inchangée dans l’URI de redirection, ce qui permet au client de la valider. Remarque :À partir de la version Madrid, la propriété systèmeglide.oauth.state.parameter.requiredrend obligatoire l’utilisation du paramètrestatedans les demandes OAuth. La propriétéd’étatest définie survraipar défaut dans les nouvelles instances etest facultativedans les instances mises à niveau. En cas de paramètred’étatmanquant, la demande d’autorisation échoue et l’erreur suivante s’affiche :Paramètre d’état manquant dans la demande.
-
Accordez le consentement d’accès à l’application cliente.
Accédez à la page de connexion (ou à l’IdP ServiceNow , si SSO est activé) et donnez votre consentement d’accès à l’application cliente.
-
ServiceNow (ou IdP, si SSO est activé) valide les informations d’identification et ServiceNow renvoie un code d’autorisation au client.
Une fois l’authentification réussie, le navigateur est redirigé vers le
redirect_uriet le code d’autorisation est inclus dans la chaîne de requête :https://yourapp.com/callback?code=AUTH_CODE&state=xyz123 -
Le client échange le code d’autorisation contre un jeton d’accès (et un jeton d’actualisation, s’il s’agit d’un client privé) en appelant le point de terminaison de jeton de ServiceNow.
Le code d’autorisation pour le jeton d’accès peut être initié en incluant le
secret clientou lacontestation de code PKCEdans le corps de la demande, en fonction du type de client (privé ou public). Dans le corps de la demande de jeton, incluezSecret clientpour les clients privés etPKCE Code Challengepour les clients publics.- Pour les clients privés
Incluez le secret clientdans le corps de la demande, lors de l’initiation de la demande de jeton pour les clients privés. Suivez la procédure pour lancer la demande de jeton à l’aide duSecret clientpour les clients privés.- Dans le cas de clients privés, le client envoie une demande
POSTau point de terminaison du jeton avec les paramètres suivants :Method: POST Endpoint: https://<servicenow_base_url>/oauth_token.do Headers: Content-Type: application/x-www-form-urlencodedTableau 3. Paramètres de demande de jeton (client privé : secret client) Paramètre Obligatoire Description grant_typeOui Définissez la valeur sur authorization_codepour échanger le code contre un jeton.codeOui Le code d’autorisation reçu du point de terminaison d’autorisation. redirect_uriOui L’URI utilisé dans la demande d’autorisation initiale. Exemple : https://yourapp.com/callback
client_idOui L’identificateur unique pour votre application cliente. client_secretOui Clé secrète du client utilisée pour s’authentifier avec le point de terminaison de jeton. ÉtatOui Une valeur générée par le client utilisée pour aider à prévenir les attaques CSRF. La valeur est renvoyée inchangée dans l’URI de redirection, ce qui permet au client de la valider. - Pour les clients publics
- Incluez le
PKCE Code Challengedans le corps de la demande, lors du lancement de la demande de jeton pour les clients publics. Suivez la procédure pour initier la demande d’autorisation à l’aide duDéfi de code PKCEpour les clients publics. - Le client envoie une demande POST au point de terminaison de jeton avec les paramètres suivants :
Method: POST Endpoint: https://<servicenow_base_url>/oauth_token.do Headers: Content-Type: application/x-www-form-urlencodedTableau 4. Paramètres de demande de jeton (Client public-PKCE) Paramètre Obligatoire Description grant_typeOui Définissez la valeur sur authorization_codepour échanger le code contre un jeton.codeOui Le code d’autorisation reçu du point de terminaison d’autorisation. redirect_uriOui L’URI utilisé dans la demande d’autorisation initiale. Exemple : https://yourapp.com/callback
client_idOui L’identificateur unique pour votre application cliente. code_verifierOui Chaîne d’origine utilisée pour générer le code_challengePKCE.ÉtatOui Une valeur générée par le client utilisée pour aider à prévenir les attaques CSRF. La valeur est renvoyée inchangée dans l’URI de redirection, ce qui permet au client de la valider.
-
Accéder aux API avec le jeton d’accès ServiceNow .
- Exemple :
- Effectuez une demande GET auprès des API à l’aide du jeton d’accès. Incluez le jeton d’accès dans l’en-tête
d’autorisation.
Method: GET End Point: https://<servicenow_base_url>/api/now/incident Authorization: Bearer YOUR_ACCESS_TOKEN -
Renouvelez le jeton d’accès s’il a expiré.
Effectuez une demande POST pour actualiser le jeton d’accès (clients privés uniquement) avec les paramètres suivants :
Method: POST Endpoint: https://<servicenow_base_url>/oauth_token.do Headers: Content-Type: application/x-www-form-urlencodedTableau 5. Paramètres de demande de jeton d’actualisation (client privé) Paramètre Obligatoire Description grant_typeOui Définissez la valeur sur refresh_tokenpour demander un nouveau jeton d’accès.refresh_tokenOui Le jeton d’actualisation précédemment émis par le point de terminaison de jeton. client_idOui L’identificateur unique pour votre application cliente. client_secretOui Clé secrète du client utilisée pour s’authentifier avec le point de terminaison de jeton.