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****.
Inicie sesión en la RAM console como administrador de RAM.
En el panel de navegación izquierdo, seleccione .
En la pestaña Role-based SSO, haga clic en la pestaña OIDC y luego en Create IdP.
-
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.
NotaAntes 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
audde los tokens OIDC emitidos. Durante el intercambio de tokens OIDC a STS, Alibaba Cloud verifica la notificaciónaudfrente 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.
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.
Inicie sesión en la RAM console como administrador de RAM.
En el panel de navegación izquierdo, seleccione .
En la página Roles, haga clic en Create Role.
En la esquina superior derecha de la página Create Role, haga clic en Switch to Policy Editor.
-
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 campoFederatedy configure lacondition.{ "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****" ] } } } ] }
-
-
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:issEl emisor OIDC. Para asumir el rol, el valor de la notificación
issen 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:audLa audiencia OIDC. Para asumir el rol, el valor de la notificación
auden 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:subEl sujeto OIDC. Para asumir el rol, el valor de la notificación
suben 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****
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.
Inicie sesión en la RAM console como administrador de RAM.
En el panel de navegación izquierdo, seleccione .
En la página Roles, haga clic en el nombre del rol de RAM objetivo.
-
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.
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.
Siga el tutorial de Okta para crear una aplicación y configurar el proyecto.
-
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****" }NotaCompruebe 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.
Copie el valor de
idTokende 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.