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****.
Faça logon no console do RAM como administrador do RAM.
No painel de navegação à esquerda, escolha .
Na aba Role-based SSO, clique na aba OIDC e, em seguida, clique em Create IdP.
-
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.
NotaAntes 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
auddos tokens OIDC emitidos. Durante a troca de token OIDC para STS, o Alibaba Cloud verifica a claimaudem 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.
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.
Faça logon no console do RAM como administrador do RAM.
No painel de navegação à esquerda, escolha .
Na página Roles, clique em Create Role.
No canto superior direito da página Create Role, clique em Switch to Policy Editor.
-
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 campoFederatede configure acondition.{ "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****" ] } } } ] }
-
-
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:issO emissor OIDC. Para assumir a função, o valor da claim
issno 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:audA audiência OIDC. Para assumir a função, o valor da claim
audno 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:subO assunto OIDC. Para assumir a função, o valor da claim
subno 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****
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.
Faça logon no console do RAM como administrador do RAM.
No painel de navegação à esquerda, escolha .
Na página Roles, clique no nome da função do RAM desejada.
-
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.
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.
Siga o tutorial do Okta para criar um aplicativo e configurar o projeto.
-
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****" }NotaVerifique 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.
Copie o valor
idTokenda 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.