Todos os produtos
Search
Central de documentação

Resource Access Management:Obter informações do usuário com OIDC

Última atualização: Jul 20, 2026

O OpenID Connect (OIDC) é uma camada de identidade baseada no OAuth 2.0 que permite ao seu aplicativo obter informações sobre os usuários que fazem login no Alibaba Cloud.

Pré-requisitos

Você concluiu as seguintes tarefas: Crie um aplicativo, Gerencie escopos OAuth e Crie um segredo de cliente.

Conceitos principais

Conceito

Descrição

ID token

O OIDC emite um ID token que representa o usuário conectado. O token contém informações do usuário, como nome e nome de login, mas não pode ser usado para acessar services do Alibaba Cloud.

Endpoint de descoberta OIDC

O endpoint de descoberta OIDC fornece toda a configuração do OIDC em um único local, simplificando a integração para desenvolvedores.

Nota

O endpoint de descoberta retorna um documento json com metadados do provedor, incluindo tipos de resposta suportados, o valor do emissor, a url da chave pública para verificação de assinatura do ID token e algoritmos de assinatura suportados.

Endpoint de descoberta OIDC do Alibaba Cloud: https://oauth.alibabacloud.com/.well-known/openid-configuration.

Exemplo de resposta do endpoint de descoberta:

{
      "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"
    }

Como funciona

OIDC workflow

  1. Um usuário faz login no aplicativo por meio de um navegador.

  2. Seu aplicativo redireciona o navegador do usuário para o service OIDC do Alibaba Cloud.

    Nota

    Se o usuário não estiver conectado, a solicitação será redirecionada adicionalmente para o service de login do Alibaba Cloud.

  3. O usuário faz login no Alibaba Cloud e autoriza seu aplicativo.

  4. O service OIDC do Alibaba Cloud redireciona o navegador do usuário de volta ao seu aplicativo, fornecendo um código de autorização.

  5. Seu aplicativo troca o código de autorização por um ID token no service OIDC do Alibaba Cloud.

  6. O service OIDC do Alibaba Cloud retorna um ID token e um access token para o aplicativo. Em seguida, o aplicativo pode obter informações do usuário usando o ID token ou o access token.

    Casos de uso comuns:

Exemplo 1: Obter a chave pública de assinatura

Exemplo de solicitação:

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());
}                    

Exemplo 2: Verificar a assinatura JWT

Os ID tokens do Alibaba Cloud são JSON Web Tokens (JWTs) assinados. O algoritmo de assinatura é RS256, conforme definido pelo padrão JWS. Valide cada ID token verificando:

  • Validação de assinatura: Use as chaves públicas do service OAuth (Example 1) para verificar a autenticidade e integridade do ID token.

    O service OAuth rotaciona suas chaves públicas regularmente. Ao obter chaves públicas:

    • Busque as chaves públicas por solicitação. Não as armazene em cache por longo prazo.

    • Durante a rotação de chaves, o service pode retornar múltiplas chaves válidas. Tente cada chave até que uma verifique a assinatura. Não presuma uma quantidade fixa de chaves.

    Exemplo de solicitação:

    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");
    }
  • Validação de tempo de vida: Verifique se o horário de emissão e o horário de expiração do token são válidos.

  • Validação de audiência: Confirme se a claim aud corresponde ao ID de cliente do seu aplicativo.

Exemplo 3: Analisar um ID token

  • Parâmetros de resposta

    • Claims do cabeçalho

      Parâmetro

      Descrição

      Escopo OAuth

      alg

      O algoritmo de assinatura.

      openid

      kid

      O ID da chave pública usada para assinar o token. Use esta chave para verificar a assinatura e evitar adulterações.

      openid

    • Claims do corpo

      Parâmetro

      Descrição

      Escopo OAuth

      exp

      O timestamp que indica o horário de expiração do token.

      openid

      sub

      Um identificador único e estável para o usuário conectado. Não inclui informações como o UID do Alibaba Cloud ou nome de usuário.

      Nota

      Se o usuário conectado for uma função ram, a claim sub é gerada a partir de <RoleId:RoleSessionName>. Cada sessão de função tem seu próprio valor sub.

      openid

      aud

      A audiência do token, que corresponde ao ID de cliente do seu aplicativo.

      openid

      iss

      O emissor do token. O valor é https://oauth.alibabacloud.com.

      openid

      iat

      O timestamp que indica quando o token foi emitido.

      openid

      type

      O tipo do usuário conectado. Valores válidos:

      • account: Uma conta Alibaba Cloud (conta principal).

      • user: Um usuário ram.

      • role: Uma função ram.

      profile

      name

      O nome de exibição do usuário conectado. Valores válidos:

      • Para um usuário ram: o nome de exibição do usuário ram.

      • Para uma função ram: <RoleName:RoleSessionName>.

      Nota

      Esta claim é retornada apenas para um usuário ram ou uma função ram.

      profile

      upn

      O nome de login do usuário ram.

      Nota

      Este parâmetro é retornado apenas para um usuário ram.

      profile

      login_name

      O nome de login da conta Alibaba Cloud (conta principal).

      Nota

      Este parâmetro é retornado apenas para uma conta Alibaba Cloud (conta principal).

      profile

      aid

      O ID da conta Alibaba Cloud à qual o usuário pertence.

      aliuid

      uid

      O ID do usuário conectado. Valores válidos:

      • Para uma conta Alibaba Cloud (conta principal): o ID da conta Alibaba Cloud, que é igual ao valor de aid.

      • Para um usuário ram: o ID do usuário ram.

      • Para uma função ram: o ID da função ram.

      aliuid

  • Exemplos de resposta

    • Exemplo de cabeçalho

      {
        "alg": "RS256",
        "kid": "JC9wxzrhqJ0gtaCEt2QLUfevEUIwltFhui4O1bh****"
      }
    • Exemplos de corpo

      Estes exemplos mostram payloads de ID token decodificados. O token real é uma única string JWT codificada que deve ser verificada (Example 2: Verify the JWT signature).

      • Exemplo de payload para uma conta 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
        }
      • Exemplo de payload para um usuário 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
        }
      • Exemplo de payload para uma função 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
        }

Exemplo 4: Usar o endpoint UserInfo

Chame o endpoint UserInfo com um access token para recuperar informações do usuário. A resposta é retornada como json simples, não como um token codificado.

Nota

Mesmo que você solicite apenas os escopos openid, aliuid e profile, um access token será retornado. Este token tem escopo restrito apenas ao endpoint UserInfo.

A url do endpoint UserInfo é https://oauth.alibabacloud.com/v1/userinfo.

Exemplo de solicitação:

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

Parâmetros de resposta:

Parâmetro

Descrição

Escopo OAuth

sub

Um identificador único e estável para o usuário conectado. Não inclui informações como o UID do Alibaba Cloud ou nome de usuário.

openid

type

O tipo do usuário conectado.

profile

name

O nome de exibição do usuário conectado.

Nota

Este parâmetro é retornado apenas para um usuário ram ou uma função ram.

profile

upn

O nome de login do usuário ram.

Nota

Este parâmetro é retornado apenas para um usuário ram.

profile

login_name

O nome de login da conta Alibaba Cloud (conta principal).

Nota

Este parâmetro é retornado apenas para uma conta Alibaba Cloud (conta principal).

profile

aid

O ID da conta Alibaba Cloud à qual o usuário pertence.

aliuid

uid

O ID do usuário conectado.

aliuid

Exemplos de resposta:

  • Exemplo de resposta para uma conta 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
    }
  • Exemplo de resposta para um usuário 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
    }
  • Exemplo de resposta para uma função 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
    }