Guide d’authentification

Assurer l’intégrité de nos API et protéger vos données contre l’utilisation non autorisée

Notre guide d’authentification vous aidera à utiliser nos API de la façon la plus sécuritaire possible. Découvrez comment les protocoles d’authentification et d’autorisation protègent l’intégrité des API et permettent d’éviter les atteintes à la protection des données et d’autres formes d’utilisation abusive.

Concepts clés pour comprendre la sécurité dans le portail des développeurs

Authentification API

Toutes les opérations d’API nécessitent un jeton d’accès au porteur OAuth 2.0. Selon le protocole OAuth 2.0, vous recevez un jeton d’accès lorsque vous fournissez un code client_id et client_secret (ID client et code secret) valides à un service d’autorisation, ainsi que l’autorisation d’accès client_credentials (identifiants client) et toute portée facultative. Le jeton d’accès est ensuite transféré dans l’en-tête d’autorisation pour chaque demande.

Identifiants client et flux d’identifiants client OAuth2

Les identifiants client sont basés sur l’autorisation d’accès OAuth 2.0. Le jeton d’accès est passé dans tous les appels de ressources en tant qu’en-tête HTTP. La ressource valide le jeton en appelant le service d’introspection du fournisseur OAuth et, si le jeton est valide, le fournisseur de ressources traite la demande.

Organigramme permettant d’autoriser une application client à accéder à une ressource protégée. Un texte descriptif de l’organigramme est fourni sur la page.

Cet organigramme décrit le procédé d’autorisation d’une application client afin qu’elle puisse accéder à une ressource protégée. Le processus commence lorsqu’une cliente ou un client commercial demande un jeton d’accès à partir du serveur OAuth. Le serveur OAuth vérifie les identifiants de la cliente ou du client et lui émet un jeton d’accès. Ce jeton est ensuite utilisé pour demander la ressource auprès du serveur de ressources. Le serveur de ressources valide le jeton d’accès par l’entremise du serveur OAuth avant d’accorder l’accès et de fournir la ressource demandée à la cliente ou au client commercial.

Agrandir l’image

Applis

Postes Canada utilise des applications pour gérer les identifiants et les inscriptions aux API et pour fournir un accès aux tableaux de bord d’utilisation. Une application peut avoir un ou plusieurs identifiants associés. Nous appuyons les autorisations d’accès par communication entre machines de type client_credentials (identifiants client).

Jetons d’accès

Pour obtenir un jeton d’accès, appelez https://{$server}/oauth2/token service et fournissez vos codes  client_id et client_secret (ID client et secret) valides ainsi que l’autorisation d’accès de type client_credentials (identifiants client) et la portée.

Le service renvoie un jeton avec les deux attributs suivants : consented_on et expires_in (début et expiration).

Par exemple :

  • consented_on : 1698647167
    Représente l’heure Unix à laquelle la durée de vie du jeton a commencé.
  • expires_in: 28800
    Représente le nombre de secondes avant l’expiration du jeton.

En connaissant les valeurs des attributs consented_on et expires_in, vous pouvez estimer l’heure d’expiration du jeton. 

Remarque : Si vous ne demandez pas un nouveau jeton avant qu’il expire, le jeton deviendra invalide et retournera un code 401 (non autorisé). Lorsque le jeton est retourné, ajoutez-le comme une autorisation : porteur, comme les autres données propres à la transaction dans l’appel de service d’entreprise. 

Comment utiliser les services protégés par le système de sécurité OAuth2

Appeler le service de jeton pour obtenir un jeton :

curl -- request POST

-- URL https://<APIGateway>/oauth2/token
-header 'X-IBM-Client-Id: 368b7f95d5574d85f83bcc04421628de'
--header 'X-IBM-Client-Secret: 3cb4a38f6598652c726c06a2db513b6d'
--header 'accept: application/json'
--data 'scope=merchant&grant_type=client_credentials'

Le service retourne ce qui suit :

{
"token_type": "Bearer",
"access_token": "AAIgMzY4YjdmOTVkNTU3NGQ4NWY4M2JjYzA0NDIxNjI4ZGWk-WzMsbRQYLoT4LAo2h07lNzGUj0SsGlPckaIC9GeiDwa943kykQCOx0wZ5X3hUVmCfGN52IlXNaxpUrPxRFZ7iNVI5SV6FDlO1UjBIqjZ6b8UlSZ_1UVCQpxqGuwn48",
"scope": "merchant",
"expires_in": 3600,
"consented_on": 1698647250
}