Todos los productos
Search
Centro de documentos

Resource Access Management:Example: Use OIDC for role-based SSO

Última actualización: Sep 03, 2026

Configure el SSO basado en roles entre Okta y Alibaba Cloud mediante OIDC. De este modo, las aplicaciones en Okta podrán acceder a los recursos de Alibaba Cloud a través de credenciales STS temporales.

Requisitos previos

Registre una aplicación OIDC en Okta y obtenga su URL de emisor y su ID de cliente. En este ejemplo se utilizan los siguientes valores:

  • URL de emisor: https://dev-xxxxxx.okta.com

  • ID de cliente: 0oa294vi1vJoClev****

Paso 1: Crear un proveedor de identidad OIDC

Cree un proveedor de identidad OIDC llamado TestOidcProvider. Establezca la IdP URL como https://dev-xxxxxx.okta.com y el Client ID como 0oa294vi1vJoClev****.

  1. Inicie sesión en la RAM console como administrador de RAM.

  2. En el panel de navegación izquierdo, seleccione Integrations > SSO.

  3. En la pestaña Role-based SSO, haga clic en la pestaña OIDC y luego en Create IdP.

  4. En la página Create IdP, configure el proveedor de identidad.

    Parámetro

    Descripción

    IdP Name

    El nombre debe ser único dentro de su cuenta de Alibaba Cloud.

    Issuer URL

    Proporcionada por su IdP externo. Debe comenzar con https, seguir el formato estándar de URL y excluir cadenas de consulta (?), fragmentos (#) y credenciales de usuario (@).

    FINGERPRINT

    Configure la huella digital del certificado CA HTTPS de su IdP externo para evitar el secuestro o la manipulación de la URL del emisor.

    Después de introducir la Issuer URL y hacer clic en Get Fingerprint, Alibaba Cloud calcula la huella digital automáticamente. Por seguridad, calcúlela también de forma local (get the thumbprint of an OIDC IdP by using OpenSSL) y compárelas. Si los valores difieren, es posible que la URL del emisor esté comprometida; compruebe la URL e introduzca la huella digital correcta.

    Nota

    Antes de rotar un certificado en su IdP, agregue la huella digital del nuevo certificado a la configuración de su IdP OIDC. Espere como mínimo un día y luego rote el certificado. Tras confirmar que puede obtener un token STS con el nuevo certificado, elimine la huella digital anterior.

    Client ID

    Su IdP externo asigna un ID de cliente cuando registra una aplicación. Este ID aparece en la notificación aud de los tokens OIDC emitidos. Durante el intercambio de tokens OIDC a STS, Alibaba Cloud verifica la notificación aud frente a este ID de cliente; la asunción de rol solo se completa correctamente si coinciden.

    Agregue varios ID de cliente si varias aplicaciones acceden a Alibaba Cloud. Máximo: 50.

    Earliest Issuance Time Allowed

    Los tokens OIDC emitidos antes de este límite de tiempo no se pueden intercambiar por tokens STS.

    Valor predeterminado: 12 horas. Valores válidos: de 1 a 168 horas.

    DESCRIPTION

    Una descripción para el proveedor de identidad.

  5. Haga clic en Create IdP.

Paso 2: Crear un rol de RAM para OIDC

Cree un rol de RAM llamado testoidc y seleccione el proveedor de identidad TestOidcProvider de Step 1.

  1. Inicie sesión en la RAM console como administrador de RAM.

  2. En el panel de navegación izquierdo, seleccione Identities > Roles.

  3. En la página Roles, haga clic en Create Role.

  4. En la esquina superior derecha de la página Create Role, haga clic en Switch to Policy Editor.

  5. En el editor de políticas, especifique el proveedor de identidad OIDC.

    El editor ofrece dos modos: Visual Editor y JSON editor. Puede utilizar cualquiera de ellos.

    • Visual Editor

      En la sección Principal, especifique el proveedor de identidad OIDC.

      En el cuadro de diálogo Add Principal, establezca Identity Provider Type como OIDC, seleccione el proveedor objetivo en la lista desplegable Identity Provider y luego haga clic en OK.

    • JSON editor

      En el elemento principal, especifique su proveedor OIDC en el campo Federated y configure la 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. En el editor, configure las condiciones.

    La siguiente tabla describe las claves de condición a nivel de servicio disponibles.

    Clave de condición

    Descripción

    Obligatorio

    Ejemplo

    oidc:iss

    El emisor OIDC. Para asumir el rol, el valor de la notificación iss en el token OIDC debe coincidir con esta condición.

    Esta condición debe usar el operador StringEquals. El valor debe ser la URL del emisor del proveedor de identidad OIDC. Esto garantiza que solo los tokens de un emisor de confianza puedan usarse para asumir el rol.

    Sí

    https://dev-xxxxxx.okta.com

    oidc:aud

    La audiencia OIDC. Para asumir el rol, el valor de la notificación aud en el token OIDC debe coincidir con esta condición.

    Esta condición debe usar el operador StringEquals. El valor puede ser uno o más de los ID de cliente del proveedor de identidad OIDC. Esto garantiza que solo los tokens OIDC generados por un ID de cliente específico puedan usarse para asumir el rol.

    Sí

    0oa294vi1vJoClev****

    oidc:sub

    El sujeto OIDC. Para asumir el rol, el valor de la notificación sub en el token OIDC debe coincidir con esta condición.

    Puede usar cualquier operador de comparación de cadenas para esta condición opcional y especificar hasta 10 sujetos.

    No

    00u294e3mzNXt4Hi****

  7. En el cuadro de diálogo Create Role, introduzca un Role Name y luego haga clic en OK.

Paso 3: Otorgar permisos al rol de RAM

Otorgue al rol de RAM testoidc de Step 2 los permisos necesarios para acceder a los recursos de Alibaba Cloud.

  1. Inicie sesión en la RAM console como administrador de RAM.

  2. En el panel de navegación izquierdo, seleccione Identities > Roles.

  3. En la página Roles, haga clic en el nombre del rol de RAM objetivo.

  4. En la pestaña Permissions, busque la política objetivo y haga clic en Revoke Permission en la columna Actions.

    Para revocar de forma masiva, seleccione varias políticas y haga clic en Revoke Permission en la parte inferior de la lista de políticas.

  5. En el cuadro de diálogo Revoke Permission, haga clic en Revoke Permission.

Paso 4: Obtener un token OIDC de Okta

El SSO basado en OIDC admite únicamente el acceso programático (no el inicio de sesión en la consola). Obtenga un token OIDC de Okta mediante un flujo estándar de OAuth 2.0, como el Authorization Code Flow.

Para consultar los pasos detallados, revise el tutorial de Okta: Sign users in to your SPA using redirect and Auth JS.

  1. Siga el tutorial de Okta para crear una aplicación y configurar el proyecto.

  2. Pruebe el proyecto en un navegador. La aplicación lo redirigirá a la página de inicio de sesión de Okta. Después de iniciar sesión y completar la MFA, se le redirigirá a index.html, donde se muestra el token de ID y sus notificaciones analizadas:

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

    Compruebe que las siguientes notificaciones coincidan con la configuración del proveedor de identidad OIDC de Step 1: create an OIDC identity provider in Alibaba Cloud. Una discrepancia provoca que la llamada a la API AssumeRoleWithOIDC falle.

    • iss: Debe coincidir exactamente con la issuer URL.

    • aud: Debe coincidir exactamente con el client ID.

  3. Copie el valor de idToken de la página.

Paso 5: Intercambiar el token OIDC por un token STS

Llame a AssumeRoleWithOIDC para intercambiar el token OIDC de Step 4 por un token STS.

Solicitud de ejemplo:

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

}

Respuesta de ejemplo:

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

El objeto Credentials contiene el token STS.

Paso 6: Usar el token STS para acceder a recursos

Utilice el token STS de Step 5 para acceder a los recursos de Alibaba Cloud dentro de los permisos del rol.