Todos os produtos
Search
Central de documentação

Resource Access Management:Exemplo: Usar OIDC para SSO baseado em função

Última atualização: Jun 26, 2026

Configure o SSO baseado em função entre o Okta e o Alibaba Cloud usando OIDC. Assim, os aplicativos no Okta podem acessar recursos do Alibaba Cloud por meio de credenciais STS temporárias.

Pré-requisitos

Registre um aplicativo OIDC no Okta e obtenha a URL do emissor e o ID do cliente. Este exemplo utiliza os seguintes valores:

  • URL do Emissor: https://dev-xxxxxx.okta.com

  • ID do Cliente: 0oa294vi1vJoClev****

Etapa 1: Criar um provedor de identidade OIDC

Crie um provedor de identidade OIDC chamado TestOidcProvider. Defina a IdP URL como https://dev-xxxxxx.okta.com e o Client ID como 0oa294vi1vJoClev****.

  1. Faça logon no console do RAM como administrador do RAM.

  2. No painel de navegação à esquerda, escolha Integrations > SSO.

  3. Na aba Role-based SSO, clique na aba OIDC e, em seguida, clique em Create IdP.

  4. Na página Create IdP, configure o provedor de identidade.

    Parâmetro

    Descrição

    IdP Name

    O nome deve ser exclusivo na sua conta do Alibaba Cloud.

    Issuer URL

    Fornecida pelo seu IdP externo. Deve começar com https, seguir o formato padrão de URL e excluir strings de consulta (?), fragmentos (#) e credenciais de usuário (@).

    Obtain Fingerprint

    Configure a impressão digital do certificado CA HTTPS do seu IdP externo para evitar sequestro ou adulteração da URL do emissor.

    Após inserir a Issuer URL e clicar em Get Fingerprint, o Alibaba Cloud calcula a impressão digital automaticamente. Por segurança, calcule-a também localmente (obter a impressão digital de um IdP OIDC usando OpenSSL) e compare os resultados. Se os valores forem diferentes, a URL do emissor pode estar comprometida — verifique a URL e insira a impressão digital correta.

    Nota

    Antes de rotacionar um certificado no seu IdP, adicione a impressão digital do novo certificado à configuração do seu IdP OIDC. Aguarde pelo menos um dia e então faça a rotação do certificado. Após confirmar que é possível obter um token STS com o novo certificado, remova a impressão digital antiga.

    Client ID

    Seu IdP externo atribui um ID de cliente quando você registra um aplicativo. Esse ID aparece na claim aud dos tokens OIDC emitidos. Durante a troca de token OIDC para STS, o Alibaba Cloud verifica a claim aud em relação a esse ID de cliente — a assunção de função só terá êxito se houver correspondência.

    Adicione vários IDs de cliente se múltiplos aplicativos acessarem o Alibaba Cloud. Máximo: 50.

    Earliest Issuance Time Allowed

    Tokens OIDC emitidos antes deste limite de tempo não podem ser trocados por tokens STS.

    Valor padrão: 12 horas. Valores válidos: 1 a 168 horas.

    Note

    Uma descrição para o provedor de identidade.

  5. Clique em Create IdP.

Etapa 2: Criar uma função do RAM para OIDC

Crie uma função do RAM chamada testoidc e selecione o provedor de identidade TestOidcProvider da Etapa 1.

  1. Faça logon no console do RAM como administrador do RAM.

  2. No painel de navegação à esquerda, escolha Identities > Roles.

  3. Na página Roles, clique em Create Role.

  4. No canto superior direito da página Create Role, clique em Switch to Policy Editor.

  5. No editor de políticas, especifique o provedor de identidade OIDC.

    O editor oferece dois modos: Editor Visual e editor JSON. Use qualquer um deles.

    • Editor Visual

      Na seção Principal, especifique o provedor de identidade OIDC.

      Na caixa de diálogo Add Principal, defina Identity Provider Type como OIDC, selecione o provedor desejado na lista suspensa Identity Provider e clique em OK.

    • Editor JSON

      No elemento principal, especifique seu provedor OIDC no campo Federated e configure a condition.

      {
        "Version": "1",
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "Federated": "acs:ram::100*******0719:oidc-provider/xiyun****"
            },
            "Action": "sts:AssumeRole",
            "Condition": {
              "StringEquals": {
                "oidc:iss": [
                  "https://dev-xxxxxx.okta.com"
                ],
                "oidc:aud": [
                  "0oa294vi1vJoClev****"
                ]
              }
            }
          }
        ]
      }
  6. No editor, configure as condições.

    A tabela a seguir descreve as chaves de condição no nível de serviço disponíveis.

    Chave de condição

    Descrição

    Obrigatório

    Exemplo

    oidc:iss

    O emissor OIDC. Para assumir a função, o valor da claim iss no token OIDC deve corresponder a esta condição.

    Esta condição deve usar o operador StringEquals. O valor deve ser a URL do emissor do provedor de identidade OIDC. Isso garante que apenas tokens de um emissor confiável possam ser usados para assumir a função.

    Sim

    https://dev-xxxxxx.okta.com

    oidc:aud

    A audiência OIDC. Para assumir a função, o valor da claim aud no token OIDC deve corresponder a esta condição.

    Esta condição deve usar o operador StringEquals. O valor pode ser um ou mais IDs de cliente do provedor de identidade OIDC. Isso garante que apenas tokens OIDC gerados por um ID de cliente especificado possam ser usados para assumir a função.

    Sim

    0oa294vi1vJoClev****

    oidc:sub

    O assunto OIDC. Para assumir a função, o valor da claim sub no token OIDC deve corresponder a esta condição.

    Você pode usar qualquer operador de comparação de string para esta condição opcional e especificar até 10 assuntos.

    Não

    00u294e3mzNXt4Hi****

  7. Na caixa de diálogo Create Role, insira um Role Name e clique em OK.

Etapa 3: Conceder permissões à função do RAM

Conceda à função do RAM testoidc da Etapa 2 as permissões necessárias para acessar recursos do Alibaba Cloud.

  1. Faça logon no console do RAM como administrador do RAM.

  2. No painel de navegação à esquerda, escolha Identities > Roles.

  3. Na página Roles, clique no nome da função do RAM desejada.

  4. Na aba Permissions, localize a política desejada e clique em Revoke Permission na coluna Actions.

    Para revogar em massa, selecione várias políticas e clique em Revoke Permission na parte inferior da lista de políticas.

  5. Na caixa de diálogo Revoke Permission, clique em Revoke Permission.

Etapa 4: Obter um token OIDC do Okta

O Alibaba Cloud não oferece suporte a logon no console com OIDC. Use acesso programático. Obtenha um token OIDC do Okta por meio de um fluxo OAuth 2.0 padrão, como o Fluxo de Código de Autorização.

Obtenha um token OIDC do Okta seguindo o tutorial oficial: Sign users in to your SPA using redirect and Auth JS.

  1. Siga o tutorial do Okta para criar um aplicativo e configurar o projeto.

  2. Teste o projeto em um navegador. O aplicativo redireciona você para a página de logon do Okta. Após fazer logon e concluir a MFA, você será redirecionado para index.html, que exibe o token de ID e suas claims analisadas:

    {
      "idToken": "eyJraWQiOiItbUF****",
      "claims": {
        "sub": "00uxbq0z40UYy9bm****",
        "name": "ssotest01",
        "email": "ssotest01@exampledomain.com",
        "ver": 1,
        "iss": "https://dev-xxxxxx.okta.com",
        "aud": "0oaxbqhfrfBl5lk2****",
        "iat": 1762841679,
        "exp": 1762845279,
        "jti": "ID.WYtCLmLKOlMcEh0uIe1jWH9T6M1JmotCvX3hIgLK6mA",
        "amr": [
          "mfa",
          "otp",
          "pwd",
          "okta_verify"
        ],
        "idp": "00oxbpgns1TnfLFg****",
        "nonce": "Xp0PTyQzw9ltYBY7SfhxG2ijt1wgi2jK6XLZOGbeQJQ79d0ScWYoHE5twl0QAklA",
        "preferred_username": "ssotest01@exampledomain.com",
        "auth_time": 1762841677,
        "at_hash": "wztv8ALAo2Au56Om3dya7w"
      },
      "expiresAt": 1762845279,
      "scopes": [
        "openid",
        "profile",
        "email"
      ],
      "authorizeUrl": "https://dev-xxxxxx.okta.com/oauth2/v1/authorize",
      "issuer": "https://dev-xxxxxx.okta.com",
      "clientId": "0oaxbqhfrfBl5lk2****"
    }
    Nota

    Verifique se as seguintes claims correspondem à configuração do provedor de identidade OIDC da Etapa 1: criar um provedor de identidade OIDC no Alibaba Cloud. Valores incompatíveis causam falha na chamada da API AssumeRoleWithOIDC.

    • iss: Deve corresponder exatamente à URL do emissor.

    • aud: Deve corresponder exatamente ao ID do cliente.

  3. Copie o valor idToken da página.

Etapa 5: Trocar o token OIDC por um token STS

Chame AssumeRoleWithOIDC para trocar o token OIDC da Etapa 4 por um token STS.

Exemplo de solicitação:

package demo;
import com.aliyun.auth.credentials.provider.AnonymousCredentialProvider;
import com.aliyun.sdk.service.sts20150401.models.*;
import com.aliyun.sdk.service.sts20150401.*;
import com.google.gson.Gson;
import darabonba.core.client.ClientOverrideConfiguration;
import java.util.concurrent.CompletableFuture;

public class AssumeRoleWithOIDC {
  public static void main(String[] args) throws Exception {

    // Anonymous access method (requires API support)
    AnonymousCredentialProvider provider = AnonymousCredentialProvider.create();

    // Configure the Client
    AsyncClient client = AsyncClient.builder()
      .region("cn-hangzhou") // Region ID
      .credentialsProvider(provider)
      // Override client-level configurations, such as the endpoint and HTTP request parameters.
      .overrideConfiguration(
        ClientOverrideConfiguration.create()
        // For the endpoint, see https://api.aliyun.com/product/Sts
        .setEndpointOverride("sts.cn-hangzhou.aliyuncs.com")
      )
      .build();

    String idToken = "eyJraWQiOiItbUF****"; // OIDC id token
    // Parameter settings for API request
    AssumeRoleWithOIDCRequest assumeRoleWithOIDCRequest = AssumeRoleWithOIDCRequest.builder()
      .OIDCToken(idToken)
      .roleArn("acs:ram::173305794806****:role/testoidc")
      .OIDCProviderArn("acs:ram::173305794806****:oidc-provider/Okta")
      .roleSessionName("test-oidc-session")
      .build();
    // Asynchronously call the API.
    CompletableFuture<AssumeRoleWithOIDCResponse> response = client.assumeRoleWithOIDC(assumeRoleWithOIDCRequest);
    // Synchronously get the return value of the API request
    AssumeRoleWithOIDCResponse resp = response.get();
    System.out.println("RequestId: " + resp.getBody().getRequestId());
    System.out.println("Assume role ARN: " + resp.getBody().getAssumedRoleUser().getArn());
    System.out.println("Credentials AccessKeyId: " + resp.getBody().getCredentials().getAccessKeyId());
    System.out.println("Credentials AccessKeySecret: " + resp.getBody().getCredentials().getAccessKeySecret());
    System.out.println("Success response: " + new Gson().toJson(resp.getBody()));

    // Finally, close the client
    client.close();
  }

}

Exemplo de resposta:

RequestId: 5EB6E605-15EA-5D96-941D-2C62DC99****
Assume role ARN: acs:ram::173305794806****:role/testoidc/test-oidc-session
Credentials AccessKeyId: STS.NZXMTBGTTHLW74AMVYKou****
Credentials AccessKeySecret: FdrYjJwTCfFfMdY4APdHsjGL9fH5RSZCtRyYMJED****
Success response:
{
    "assumedRoleUser": {
        "arn": "acs:ram::173305794806****:role/testoidc/test-oidc-session",
        "assumedRoleId": "30048007026011****:test-oidc-session"
    },
    "credentials": {
        "accessKeyId": "STS.NZXMTBGTTHLW74AMVYKou****",
        "accessKeySecret": "FdrYjJwTCfFfMdY4APdHsjGL9fH5RSZCtRyYMJED****",
        "expiration": "2025-11-11T08:01:03Z",
        "securityToken": "CAISwwJ1q6Ft5B2yfSjI****"
    },
    "OIDCTokenInfo": {
        "clientIds": "0oaxbqhfrfBl5lk2****",
        "expirationTime": "2025-11-11T07:14:39Z",
        "issuanceTime": "2025-11-11T06:14:39Z",
        "issuer": "https://dev-xxxxxx.okta.com",
        "subject": "00uxbq0z40UYy9bm****",
        "verificationInfo": "Success"
    },
    "requestId": "5EB6E605-15EA-5D96-941D-2C62DC99****"
}

O objeto Credentials contém o token STS.

Etapa 6: Usar o token STS para acessar recursos

Use o token STS da Etapa 5 para acessar recursos do Alibaba Cloud dentro das permissões da função.