Flux d’informations d’identification du client OAuth 2.0

Prev Next

Le flux d’octroi des informations d’identification du client OAuth 2.0 permet à un service Web (client confidentiel) de s’authentifier à l’aide de ses informations d’identification, plutôt que d’emprunter l’identité d’un utilisateur, lors de l’appel d’un autre service Web. Cette autorisation, spécifiée dans la RFC 6749 et parfois appelée OAuth à deux pattes, permet d’accéder à des ressources hébergées sur le Web en utilisant l’identité d’une application. Il est couramment utilisé pour les interactions de serveur à serveur qui s’exécutent en arrière-plan, sans interaction immédiate de l’utilisateur, et est souvent appelé démons ou comptes de service.
Caractéristiques clés :

  • Les autorisations sont accordées directement à l’application par un administrateur.

  • L’application présente un jeton à une ressource, ce qui signifie que l’application dispose de l’autorisation d’effectuer une action, car aucun utilisateur n’est impliqué dans l’authentification.

Cet article fournit un guide complet sur l’authentification auprès de l’API OnespanSign à l’aide du flux d’informations d’identification du client OAuth 2.0.

Obtenir un jeton

Une fois que vous avez obtenu l’autorisation requise pour votre application, vous pouvez procéder à l’obtention de jetons d’accès pour les API. Pour ce faire, utilisez les informations d’identification du client en envoyant une requête POST au point de terminaison /oauth2/token de l’API OnepanSign pour récupérer un jeton.

Cette commande ci-dessous a été testée avec les versions 7.8.1 et 8.7.1 de curl. Nous ne garantissons pas le succès sur toutes les versions de boucles

curl -H 'Content-Type: application/x-www-form-urlencoded' \
 -u "clientId:clientSecret" \
 https://apps.esignlive.com/oauth2/token \
 -d "grant_type=client_credentials"

Paramètre

Condition

Description

Autorisation

Obligatoire

Les informations d’identification du client sont acceptées sous la forme d’un modèle d’authentification de base ou d’un paramètre d’en-tête, conformément à la RFC 6749.

Dans les en-têtes de requête, passez la chaîne encodée en Base64 représentant vos valeurs 'client_id' et 'client_secret', ajoutée au texte Basic comme suit :

``` Basic <Base64 encoded client_id and client_secret> ```
Base64 encoded client_id and client_secret = Base64 of "client_id:client_secret"

grant_type

Obligatoire

Doit être réglé sur client_credentials. À partir de la version 24.R5, 'grant_type' ne sera plus accepté comme paramètre de requête. Elles ne seront acceptées qu’en tant que données de formulaire.

sender_id

Optionnel

ID de l’expéditeur. L’expéditeur doit exister, exister et faire partie du même compte que l’ID client.

delegator_id

Optionnel

ID du délégant. Si cette option est activée, l’ID de l’expéditeur doit également être défini, car une délégation doit exister entre l’expéditeur et le délégant.

Une réponse réussie

Une réponse réussie ressemble à ceci :

{

 "access_token": "eyJraWQiOiIxOTk5OGJhOS1jYTY1LTQ3ODYtOGYzMi01ZGUxZDNhM2JhYTUiL....",

 "token_type": "Bearer",

 "expires_in": 299

}

Paramètre

Description

access_token

Le jeton d’accès demandé. L’application peut utiliser ce jeton pour s’authentifier auprès de la ressource sécurisée, telle qu’une API web.

token_type

Indique la valeur du type de jeton. Le seul type pris en charge par l’API OnespanSign est bearer.

expires_in

Durée de validité d’un jeton d’accès (en secondes).

L’API OnespanSign n’offre pas de fonctionnalité d’actualisation des jetons, de sorte qu’un nouveau jeton doit être généré une fois que le jeton existant a expiré. Cela nécessite une gestion supplémentaire du côté de l’application par les intégrateurs utilisant l’API OnespanSign. Toutefois, le SDK Esl fournit la recréation automatique de jetons côté client, ce qui simplifie le processus.

Utiliser un jeton

Maintenant que vous avez acquis un jeton, utilisez-le pour envoyer des requêtes à la ressource. Lorsque le jeton expire, répétez la demande au point de terminaison « oauth2/token » pour acquérir un nouveau jeton d’accès.

GET /aws/rest/services/packages HTTP/1.1

Host: apps.esignlive.com

Accept: application/json

Content-Type: application/json

Authorization: Bearer eyJraWQiOiIxOTk5OGJhOS1jYTY1LTQ3ODYtOGYzMi01ZGUxZDNhM2JhYTUiLCJhbGciOiJSUzI....

Implémentation d’OAuth2

Pour l’authentification oAuth2, l’implémenteur doit réutiliser le jeton généré jusqu’à ce qu’il expire au lieu de créer un nouveau jeton à chaque appel.

Le SDK gère cela correctement, en mettant en cache les clients créés et ces clients conservent le jeton, et avant chaque appel effectué par le SDK, l’expiration du jeton est vérifiée et le SDK décide si un nouveau jeton est nécessaire ou non.

Lors de l’utilisation du SDK, il n’y a rien à faire par l’implémenteur sauf à suivre l’utilisation suggérée ci-dessous.

Dans les deux cas ci-dessus, le ossClient / eslClient sera mis en cache en mémoire et les SDK imposeront aux clients de réutiliser le jeton oAuth2 et de régénérer un nouveau jeton lorsqu’il expire. Le tout en arrière-plan sans qu’il soit nécessaire de procéder à une mise en œuvre supplémentaire.

Java SDK

EslOAuthClientConfig config = EslOAuthClientConfig.Builder()
            .withClientId("clientId") // Mandatory: replace with your clientId
            .withClientSecret("clientSecret") // Mandatory: replace with your clientSecret
            .withSenderId(senderId) //Optional (new R4) replace with the sender id you want to impersonate
            .withDelegatorId(delegatorId) //Optional (new R4) replace with the delgator id that gave permission on sender id to act on his behalf
            .withAuthenticationServer("authenticationServer") // Mandatory: replace with the OneSpan's authorization server url
            .withApiUrl("apiUrl") // Mandatory: replace with OneSpan's API url
            .withAllowAllSSLCertificatesFlag(allowAllSSLCertificatesFlag) // Optional: default false
            .withUseSystemProperties(useSystemProperties) // Optional: default false. If this is set to true then all proxy configurations should be passed as system properties
            .withProxyConfig(proxyConfig) // Optional: default null. To be passed if proxy is required and useSystemProperties is set to false
            .withHeaders(headers) // Optional: default empty map. To be passed if extra headers are need to the request
            .build();
         
        EslClient eslClient = EslOAuthClientProvider.getInstance().getEslClient(config);
         
        //proceed to make calls to our API using eslClient.

Kit de développement logiciel (SDK) .NET

OSSAuthClientConfig config = new OSSAuthClientConfig.Builder()
                .WithClientId(clientId) // Mandatory: replace with your clientId
                .WithClientSecret(clientSecret) // Mandatory: replace with your clientSecret
                .WithAuthenticationServer(authenticationServer)// Mandatory: replace with the OneSpan's authorization server url
                .WithApiUrl(apiUrl) // Mandatory: replace with OneSpan's API url
                .WithAllowAllSSLCertificatesFlag(allowAllSSLCertificatesFlag) // Optional: default false
                .WithUseSystemProperties(useSystemProperties) // Optional: default false. If this is set to true then all proxy configurations should be passed as system properties
                .WithProxyConfiguration(proxyConfig) // Optional: default null. To be passed if proxy is required and useSystemProperties is set to false
                .WithHeaders(headers) // Optional: default empty map. To be passed if extra headers are need to the request
                .Build();
 
            OssClient ossClient = OSSAuthClientProvider.Instance.GetOssClient(config);
          //proceed to make calls to our API using ossClient

Appel direct d’API

Lorsque l’API est accessible sans l’utilisation de SDK, c’est du côté de l’implémenteur de mettre en cache en mémoire le jeton oAuth2 comme suit :

  • mettre en cache le jeton par paire de clés clientId (clé : clientId, valeur : jeton)

  • Vérifiez si le jeton a expiré avant chaque appel et donnez-lui une mémoire tampon de quelques secondes. Si le jeton, avec tampon, a expiré, appelez le service d’autorisation de OneSpan pour obtenir un nouveau jeton, sinon réutilisez le même jeton.