Tous les produits
Search
Centre de documentation

Resource Access Management:Obtenir les informations utilisateur avec OIDC

Dernière mise à jour :Aug 09, 2026

OpenID Connect (OIDC) est une couche d'identité basée sur OAuth 2.0 qui permet à votre application d'obtenir des informations sur les utilisateurs connectés à Alibaba Cloud.

Prérequis

Assurez-vous d'avoir effectué les tâches suivantes : Créer une application, Gérer les étendues OAuth et Créer un secret client.

Concepts clés

Concept

Description

Jeton d'identité (ID token)

Le service OIDC émet un jeton d'identité représentant l'utilisateur connecté. Ce jeton contient des informations telles que le nom et le nom de connexion, mais ne permet pas d'accéder aux services Alibaba Cloud.

Endpoint de découverte OIDC

L'endpoint de découverte OIDC centralise toute la configuration OIDC, ce qui simplifie l'intégration pour les développeurs.

Remarque

L'endpoint de découverte renvoie un document JSON contenant les métadonnées du fournisseur, notamment les types de réponse pris en charge, la valeur de l'émetteur, l'URL de la clé publique pour la vérification de la signature du jeton d'identité et les algorithmes de signature pris en charge.

Endpoint de découverte OIDC d'Alibaba Cloud : https://oauth.alibabacloud.com/.well-known/openid-configuration.

Exemple de réponse de l'endpoint de découverte :

{
  "code_challenge_methods_supported": [
    "plain",
    "S256"
  ],
  "subject_types_supported": [
    "public"
  ],
  "response_types_supported": [
    "code"
  ],
  "issuer": "https://oauth.alibabacloud.com",
  "jwks_uri": "https://oauth.alibabacloud.com/v1/keys",
  "revocation_endpoint": "https://oauth.alibabacloud.com/v1/revoke",
  "token_endpoint": "https://oauth.alibabacloud.com/v1/token",
  "id_token_signing_alg_values_supported": [
    "RS256"
  ],
  "scopes_supported": [
    "openid",
    "aliuid",
    "profile"
  ],
  "authorization_endpoint": "https://signin.alibabacloud.com/oauth2/v1/auth"
}

Fonctionnement

OIDC workflow

  1. Un utilisateur se connecte à l'application depuis un navigateur.

  2. Votre application redirige le navigateur de l'utilisateur vers le service OIDC d'Alibaba Cloud.

    Remarque

    Si l'utilisateur n'est pas connecté, la requête est redirigée vers le service de connexion d'Alibaba Cloud.

  3. L'utilisateur se connecte à Alibaba Cloud et autorise votre application.

  4. Le service OIDC d'Alibaba Cloud redirige le navigateur de l'utilisateur vers votre application en fournissant un code d'autorisation.

  5. Votre application échange le code d'autorisation contre un jeton d'identité auprès du service OIDC d'Alibaba Cloud.

  6. Le service OIDC d'Alibaba Cloud renvoie un jeton d'identité et un jeton d'accès à l'application. L'application peut ensuite obtenir les informations utilisateur en utilisant soit le jeton d'identité, soit le jeton d'accès.

    Cas d'utilisation courants :

Exemple 1 : Obtenir la clé publique de signature

Exemple de requête :

private List getSignPublicKey() {
  HttpResponse response = HttpClientUtils.doGet("https://oauth.alibabacloud.com/v1/keys");
  List rsaKeyList = new ArrayList();
  if (response.getCode() == 200 && response.isSuccess()) {
    String keys = JSON.parseObject(response.getData()).getString("keys");
    try {
      JSONArray publicKeyList = JSON.parseArray(keys);
      for (Object object : publicKeyList) {
        RSAKey rsaKey = RSAKey.parse(JSONObject.toJSONString(object));
        rsaKeyList.add(rsaKey);
      }
      return rsaKeyList;
    } catch (Exception e) {
      LOG.info(e.getMessage());
    }
  }
  LOG.info("GetSignPublicKey failed:{}", response.getData());
  throw new AuthenticationException(response.getData());
}                    

Exemple 2 : Vérifier la signature JWT

Les jetons d'identité d'Alibaba Cloud sont des JSON Web Tokens (JWT) signés. L'algorithme de signature est RS256, tel que défini par la norme JWS. Validez chaque jeton d'identité en vérifiant les points suivants :

  • Validation de la signature : utilisez les clés publiques du service OAuth (Exemple 1) pour vérifier l'authenticité et l'intégrité du jeton d'identité.

    Le service OAuth fait régulièrement tourner ses clés publiques. Lors de l'obtention des clés publiques :

    • Récupérez les clés publiques à chaque requête. Ne les mettez pas en cache à long terme.

    • Pendant la rotation des clés, le service peut renvoyer plusieurs clés valides. Essayez chaque clé jusqu'à ce que l'une d'elles vérifie la signature. Ne supposez pas un nombre fixe de clés.

    Exemple de requête :

    public boolean verifySign(SignedJWT signedJWT) {
      List publicKeyList = getSignPublicKey();
      RSAKey rsaKey = null;
      for (RSAKey key : publicKeyList) {
        if (signedJWT.getHeader().getKeyID().equals(key.getKeyID())) {
          rsaKey = key;
        }
      }
      if (rsaKey != null) {
        try {
          RSASSAVerifier verifier = new RSASSAVerifier(rsaKey.toRSAPublicKey());
          if (signedJWT.verify(verifier)) {
            return true;
          }
        } catch (Exception e) {
          LOG.info("Verify exception:{}", e.getMessage());
        }
      }
      throw new AuthenticationException("Can't verify signature for id token");
    }
  • Validation de la durée de vie : vérifiez que l'heure d'émission et l'heure d'expiration du jeton sont valides.

  • Validation de l'audience : vérifiez que la revendication aud correspond à l'ID client de votre application.

Exemple 3 : Analyser un jeton d'identité

  • Paramètres de réponse

    • Revendications d'en-tête

      Paramètre

      Description

      Étendue OAuth

      alg

      L'algorithme de signature.

      openid

      kid

      L'ID de la clé publique utilisée pour signer le jeton. Utilisez cette clé pour vérifier la signature et prévenir toute falsification.

      openid

    • Revendications de corps

      Paramètre

      Description

      Étendue OAuth

      exp

      L'horodatage indiquant l'heure d'expiration du jeton.

      openid

      sub

      Un identifiant unique et stable pour l'utilisateur connecté. Il ne contient pas d'informations telles que l'UID Alibaba Cloud ou le nom d'utilisateur.

      Remarque

      Si l'utilisateur connecté est un rôle RAM, la revendication sub est générée à partir de <RoleId:RoleSessionName>. Chaque session de rôle possède sa propre valeur sub.

      openid

      aud

      L'audience du jeton, qui correspond à l'ID client de votre application.

      openid

      iss

      L'émetteur du jeton. La valeur est https://oauth.alibabacloud.com.

      openid

      iat

      L'horodatage indiquant quand le jeton a été émis.

      openid

      type

      Le type de l'utilisateur connecté. Valeurs valides :

      • account : un compte Alibaba Cloud (compte principal).

      • user : un utilisateur RAM.

      • role : un rôle RAM.

      profile

      name

      Le nom d'affichage de l'utilisateur connecté. Valeurs valides :

      • Pour un utilisateur RAM : le nom d'affichage de l'utilisateur RAM.

      • Pour un rôle RAM : <RoleName:RoleSessionName>.

      Remarque

      Cette revendication est renvoyée uniquement pour un utilisateur RAM ou un rôle RAM.

      profile

      upn

      Le nom de connexion de l'utilisateur RAM.

      Remarque

      Cette revendication est renvoyée uniquement pour un utilisateur RAM.

      profile

      login_name

      Le nom de connexion du compte Alibaba Cloud (compte principal).

      Remarque

      Cette revendication est renvoyée uniquement pour un compte Alibaba Cloud (compte principal).

      profile

      aid

      L'ID du compte Alibaba Cloud auquel appartient l'utilisateur.

      aliuid

      uid

      L'ID de l'utilisateur connecté. Valeurs valides :

      • Pour un compte Alibaba Cloud (compte principal) : l'ID du compte Alibaba Cloud, qui est identique à la valeur aid.

      • Pour un utilisateur RAM : l'ID de l'utilisateur RAM.

      • Pour un rôle RAM : l'ID du rôle RAM.

      aliuid

  • Exemples de réponse

    • Exemple d'en-tête

      {
        "alg": "RS256",
        "kid": "JC9wxzrhqJ0gtaCEt2QLUfevEUIwltFhui4O1bh****"
      }
    • Exemples de corps

      Ces exemples montrent les charges utiles décodées des jetons d'identité. Le jeton réel est une chaîne JWT encodée unique qui doit être vérifiée (Exemple 2 : Vérifier la signature JWT).

      • Exemple de charge utile pour un compte Alibaba Cloud

        {
          "exp": 1517539523,
          "sub": "123456789012****",
          "aud": "4567890123456****",
          "iss": "https://oauth.alibabacloud.com",
          "iat": 1517535923,
          "type": "account",
          "login_name":"alice@example.com", // The login name of the Alibaba Cloud account
          "aid": "123456789012****", // The ID of the Alibaba Cloud account
          "uid": "123456789012****" // The ID of the Alibaba Cloud account
        }
      • Exemple de charge utile pour un utilisateur RAM

        {
          "exp": 1517539523,
          "sub": "123456789012****",
          "aud": "4567890123456****",
          "iss": "https://oauth.alibabacloud.com",
          "iat": 1517535923,
          "type": "user",
          "name": "alice", // The display name of the RAM user
          "upn": "alice@example.onaliyun.com", // The login name of the RAM user
          "aid": "123456789012****", // The ID of the Alibaba Cloud account to which the RAM user belongs
          "uid": "234567890123****" // The ID of the RAM user
        }
      • Exemple de charge utile pour un rôle RAM

        {
          "exp": 1517539523,
          "sub": "123456789012****",
          "aud": "4567890123456****",
          "iss": "https://oauth.alibabacloud.com",
          "iat": 1517535923,
          "type": "role",
          "name": "NetworkAdministrator:alice", // The display name of the RAM role
          "aid": "123456789012****", // The ID of the Alibaba Cloud account to which the RAM role belongs
          "uid": "300800165472****" // The ID of the RAM role
        }

Exemple 4 : Utiliser l'endpoint UserInfo

Vous pouvez appeler l'endpoint UserInfo avec un jeton d'accès pour récupérer les informations utilisateur. La réponse est renvoyée au format JSON brut, et non sous forme de jeton encodé.

Remarque

Même si vous ne demandez que les étendues openid, aliuid et profile, un jeton d'accès est renvoyé. Ce jeton est limité à l'endpoint UserInfo.

L'URL de l'endpoint UserInfo est https://oauth.alibabacloud.com/v1/userinfo.

Exemple de requête :

GET v1/userinfo HTTP/1.1
Host: oauth.alibabacloud.com
Authorization: Bearer SIAV32hkKG

Paramètres de réponse :

Paramètre

Description

Étendue OAuth

sub

Un identifiant unique et stable pour l'utilisateur connecté. Il ne contient pas d'informations telles que l'UID Alibaba Cloud ou le nom d'utilisateur.

openid

type

Le type de l'utilisateur connecté.

profile

name

Le nom d'affichage de l'utilisateur connecté.

Remarque

Ce paramètre est renvoyé uniquement pour un utilisateur RAM ou un rôle RAM.

profile

upn

Le nom de connexion de l'utilisateur RAM.

Remarque

Ce paramètre est renvoyé uniquement pour un utilisateur RAM.

profile

login_name

Le nom de connexion du compte Alibaba Cloud (compte principal).

Remarque

Ce paramètre est renvoyé uniquement pour un compte Alibaba Cloud (compte principal).

profile

aid

L'ID du compte Alibaba Cloud auquel appartient l'utilisateur.

aliuid

uid

L'ID de l'utilisateur connecté.

aliuid

Exemples de réponse :

  • Exemple de réponse pour un compte Alibaba Cloud

    HTTP/1.1 200 OK
    Content-Type: application/json
    {
      "sub": "123456789012****", 
      "type": "account",
      "login_name":"alice@example.com", // The login name of the Alibaba Cloud account
      "aid": "123456789012****", // The ID of the Alibaba Cloud account
      "uid": "123456789012****" // The ID of the Alibaba Cloud account
    }
  • Exemple de réponse pour un utilisateur RAM

    HTTP/1.1 200 OK
    Content-Type: application/json
    {
      "sub": "123456789012****", 
      "type": "user",  
      "name": "alice", // The display name of the RAM user
      "upn": "alice@example.onaliyun.com", // The login name of the RAM user
      "aid": "123456789012****", // The ID of the Alibaba Cloud account to which the RAM user belongs
      "uid": "234567890123****" // The ID of the RAM user
    }
  • Exemple de réponse pour un rôle RAM

    HTTP/1.1 200 OK
    Content-Type: application/json
    {
      "sub": "123456789012****", 
      "type": "role",
      "name": "NetworkAdministrator:alice", // The display name of the RAM role
      "aid": "123456789012****", // The ID of the Alibaba Cloud account to which the RAM role belongs
      "uid": "300800165472****" // The ID of the RAM role
    }