Utilisez le flux de code d'autorisation OAuth 2.0 pour permettre à une application web d'accéder aux API Alibaba Cloud pour le compte d'un utilisateur connecté.
Prérequis
Vous avez créé une application web OAuth 2.0 dans la console RAM.
Vous avez créé et stocké de manière sécurisée le secret client pour votre application.
Vue d'ensemble du flux d'autorisation
Le flux de code d'autorisation OAuth 2.0 permet à votre application d'obtenir un jeton d'accès sans manipuler directement les identifiants de l'utilisateur.
L'utilisateur initie la connexion : Un utilisateur tente d'accéder à une ressource protégée dans votre application web.
Redirection vers le serveur d'autorisation : Votre application redirige le navigateur vers le point de terminaison d'autorisation d'Alibaba Cloud.
L'utilisateur donne son consentement : L'utilisateur se connecte à Alibaba Cloud et accorde à votre application les permissions demandées.
Réception du code d'autorisation : Le serveur d'autorisation redirige le navigateur vers votre URL de redirection avec un code d'autorisation à usage unique.
Échange du code contre des jetons : Votre serveur backend appelle le point de terminaison de jeton d'Alibaba Cloud pour échanger le code d'autorisation contre un jeton d'accès, un jeton ID et éventuellement un jeton d'actualisation.
Accès aux ressources protégées : Votre application utilise le jeton d'accès pour appeler les API Alibaba Cloud pour le compte de l'utilisateur.
Étape 1 : Demander un code d'autorisation
Pour démarrer le flux, votre application web doit rediriger le navigateur de l'utilisateur vers le point de terminaison d'autorisation d'Alibaba Cloud : https://signin.alibabacloud.com/oauth2/v1/auth.
Paramètres de la requête
|
Paramètre |
Obligatoire |
Description |
|
client_id |
Oui |
L'ID de votre application web. |
|
redirect_uri |
Oui |
L'URI de redirection vers laquelle l'utilisateur est envoyé après avoir donné son consentement. Elle doit correspondre exactement à une URI enregistrée pour votre application. |
|
response_type |
Oui |
Doit être défini sur |
|
scope |
Non |
Liste des étendues OAuth demandées, séparées par des espaces. Si omis, toutes les étendues configurées sont demandées. |
|
access_type |
Non |
Définissez sur |
|
state |
Non |
Une valeur opaque qui maintient l'état entre la requête et le rappel. Utilisez une chaîne aléatoire et imprévisible pour prévenir les attaques CSRF. |
|
prompt |
Non |
Définissez sur |
Exemple de requête
Exemple d'URL de redirection :
https://signin.alibabacloud.com/oauth2/v1/auth?
client_id=123****&
redirect_uri=https://example.com/authcallback/&
response_type=code&
scope=openid /acs/ccc&
access_type=offline&
state=123456****
Exemple de réponse
Si l'utilisateur donne son consentement, le serveur d'autorisation redirige le navigateur vers votre redirect_uri avec le code d'autorisation et l'état en tant que paramètres de requête.
GET HTTP/1.1 302 Found
Location: https://example.com/authcallback/?code=ABAFDGDFXYZW888&state=123456****
Étape 2 : Échanger le code d'autorisation contre un jeton d'accès
Après avoir reçu le code d'autorisation, votre serveur backend doit envoyer une requête POST au point de terminaison de jeton d'Alibaba Cloud (https://oauth.alibabacloud.com/v1/token) pour échanger le code contre des jetons.
Paramètres de la requête (corps POST)
|
Paramètre |
Obligatoire |
Description |
|
code |
Oui |
Le code d'autorisation provenant de l'Étape 1. |
|
client_id |
Oui |
L'ID de votre application web. |
|
redirect_uri |
Oui |
La même URI de redirection que celle utilisée dans la requête de l'Étape 1. |
|
grant_type |
Oui |
Doit être défini sur |
|
client_secret |
Oui |
Le secret client de votre application web. |
Exemple de requête
POST /v1/token HTTP/1.1
Host: oauth.alibabacloud.com
Content-Type: application/x-www-form-urlencoded
code=ABAFDGDFXYZW888&
client_id=123****&
client_secret=`your_client_secret`&
redirect_uri=https://example.com/authcallback/&
grant_type=authorization_code
Exemple de réponse
Une requête réussie renvoie un objet JSON contenant les jetons.
{
"access_token": "eyJraWQiOiJrMTIzNCIsImVu****",
"token_type": "Bearer",
"expires_in": "3600",
"refresh_token": "Ccx63VVeTn2dxV7ovXXfLtAqLLERA****",
"id_token": "eyJhbGciOiJIUzI1****",
"scope": "openid /acs/ccc"
}
Étape 3 (Facultative) : Actualiser le jeton d'accès
Les jetons d'accès ont une durée de vie courte. Si vous avez demandé un accès offline, utilisez le jeton d'actualisation pour obtenir un nouveau jeton d'accès sans obliger l'utilisateur à se reconnecter. Point de terminaison : https://oauth.alibabacloud.com/v1/token
Paramètres de la requête (corps POST)
|
Paramètre |
Obligatoire |
Description |
|
refresh_token |
Oui |
Le jeton d'actualisation que vous avez reçu précédemment. |
|
client_id |
Oui |
L'ID de votre application web. |
|
grant_type |
Oui |
Doit être défini sur |
|
client_secret |
Non |
Le secret client de votre application web. |
Exemple de requête
POST /v1/token HTTP/1.1
Host: oauth.alibabacloud.com
Content-Type: application/x-www-form-urlencoded
refresh_token=Ccx63VVeTn2dxV7ovXXfLtAqLLERAH1Bc&
client_id=123****&
client_secret=`your_client_secret`&
grant_type=refresh_token
Exemple de réponse
Le point de terminaison de jeton renvoie un nouveau jeton d'accès.
{
"access_token": "eyJraWQiOiJrMTIzNCIsImVu****",
"token_type": "Bearer",
"expires_in": "3600"
}
Révoquer un jeton d'actualisation
Lorsqu'un utilisateur se déconnecte ou dissocie son compte, révoquez le jeton d'actualisation associé. Point de terminaison : https://oauth.alibabacloud.com/v1/revoke
Paramètres de la requête (corps POST)
|
Paramètre |
Obligatoire |
Description |
|
token |
Oui |
Le jeton d'actualisation que vous souhaitez révoquer. |
|
client_id |
Oui |
L'ID de votre application web. |
|
client_secret |
Non |
Le secret client de votre application web. |
Une requête réussie renvoie le code HTTP 200 OK.