Konfigurasikan SSO berbasis peran antara Okta dan Alibaba Cloud menggunakan OIDC. Aplikasi di Okta kemudian dapat mengakses sumber daya Alibaba Cloud melalui kredensial STS sementara.
Prasyarat
Daftarkan aplikasi OIDC di Okta dan peroleh URL issuer serta client ID-nya. Contoh ini menggunakan nilai-nilai berikut:
-
Issuer URL: https://dev-xxxxxx.okta.com
-
Client ID: 0oa294vi1vJoClev****
Langkah 1: Buat penyedia identitas OIDC
Buat penyedia identitas OIDC bernama TestOidcProvider. Atur IdP URL ke https://dev-xxxxxx.okta.com dan Client ID ke 0oa294vi1vJoClev****.
-
Masuk ke RAM console sebagai administrator RAM.
-
Di panel navigasi sebelah kiri, pilih .
-
Pada tab Role-based SSO, klik tab OIDC, lalu klik Create IdP.
-
Pada halaman Create IdP, konfigurasikan penyedia identitas.
Parameter
Deskripsi
IdP Name
Nama harus unik dalam Akun Alibaba Cloud Anda.
Issuer URL
Disediakan oleh IdP eksternal Anda. Harus dimulai dengan
https, mengikuti format URL standar, dan tidak boleh mencakup string kueri (?), fragmen (#), atau kredensial pengguna (@).Obtain Fingerprint
Konfigurasikan thumbprint sertifikat CA HTTPS dari IdP eksternal Anda untuk mencegah pembajakan atau perubahan pada URL issuer.
Setelah Anda memasukkan Issuer URL dan mengklik Get Fingerprint, Alibaba Cloud akan menghitung thumbprint secara otomatis. Untuk keamanan, hitung juga secara lokal (dapatkan thumbprint OIDC IdP menggunakan OpenSSL) dan bandingkan. Jika nilainya berbeda, URL issuer mungkin telah dikompromikan — verifikasi URL tersebut dan masukkan thumbprint yang benar.
CatatanSebelum melakukan rotasi sertifikat pada IdP Anda, tambahkan thumbprint sertifikat baru ke konfigurasi OIDC IdP Anda. Tunggu setidaknya satu hari, lalu lakukan rotasi sertifikat. Setelah memastikan Anda dapat memperoleh token STS dengan sertifikat baru, hapus thumbprint lama.
Client ID
IdP eksternal Anda memberikan client ID saat Anda mendaftarkan aplikasi. ID ini muncul dalam klaim
audpada token OIDC yang diterbitkan. Selama pertukaran token OIDC ke token STS, Alibaba Cloud memverifikasi klaimaudterhadap client ID ini — asumsi peran hanya berhasil jika keduanya sesuai.Tambahkan beberapa client ID jika beberapa aplikasi mengakses Alibaba Cloud. Maksimum: 50.
Earliest Issuance Time Allowed
Token OIDC yang diterbitkan sebelum batas waktu ini tidak dapat ditukar dengan token STS.
Nilai default: 12 jam. Nilai valid: 1 hingga 168 jam.
Note
Deskripsi untuk penyedia identitas.
-
Klik Create IdP.
Langkah 2: Buat peran RAM untuk OIDC
Buat peran RAM bernama testoidc dan pilih penyedia identitas TestOidcProvider dari Langkah 1.
-
Masuk ke RAM console sebagai administrator RAM.
-
Di panel navigasi sebelah kiri, pilih .
-
Pada halaman Roles, klik Create Role.

-
Di pojok kanan atas halaman Create Role, klik Switch to Policy Editor.

-
Di editor kebijakan, tentukan penyedia identitas OIDC.
Tersedia dua mode:
-
Visual Editor
Pada bagian Principal, tentukan penyedia identitas OIDC.


-
Script editor
Pada bidang
PrincipalFederated, tentukan penyedia OIDC dan konfigurasikanCondition.{ "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****" ] } } } ] }
-
-
Kondisi tingkat layanan yang didukung:
Condition key
Deskripsi
Wajib
Contoh
oidc:issURL issuer OIDC. Klaim
issdalam token harus sesuai dengan nilai ini.Gunakan
StringEqualsdengan URL issuer penyedia OIDC Anda.Ya
https://dev-xxxxxx.okta.com
oidc:audAudience OIDC. Klaim
auddalam token harus sesuai dengan nilai ini.Gunakan
StringEqualsdengan satu atau beberapa client ID dari penyedia OIDC Anda.Ya
0oa294vi1vJoClev****
oidc:subSubjek OIDC. Membatasi principal mana yang dapat mengasumsikan peran.
Klaim
subdalam token harus sesuai dengan kondisi ini. Mendukung operator kondisi string apa pun dengan maksimal 10 nilai.Tidak
00u294e3mzNXt4Hi****
-
Di kotak dialog Create Role, masukkan Role Name dan klik OK.
Langkah 3: Berikan izin kepada peran RAM
Berikan izin yang diperlukan kepada peran RAM testoidc dari Langkah 2 untuk mengakses sumber daya Alibaba Cloud.
-
Masuk ke RAM console sebagai administrator RAM.
-
Di panel navigasi sebelah kiri, pilih .
-
Pada halaman Roles, klik nama peran RAM target.
-
Pada tab Permissions, temukan kebijakan target dan klik Revoke Permission di kolom Actions.
Anda juga dapat memilih beberapa kebijakan dan mengklik Revoke Permission di bagian bawah daftar kebijakan untuk mencabut beberapa izin sekaligus.
-
Pada kotak dialog Revoke Permission, klik Revoke Permission.
Langkah 4: Peroleh token OIDC dari Okta
Alibaba Cloud tidak mendukung login konsol dengan OIDC. Gunakan akses programatik sebagai gantinya. Peroleh token OIDC dari Okta melalui alur OAuth 2.0 standar seperti Authorization Code Flow.
Peroleh token OIDC dari Okta dengan mengikuti tutorial resmi: Sign users in to your SPA using redirect and Auth JS.
-
Ikuti tutorial Okta untuk membuat aplikasi dan mengonfigurasi proyek.
-
Uji proyek di browser. Aplikasi akan mengarahkan Anda ke halaman login Okta. Setelah Anda login dan menyelesaikan MFA, Anda akan diarahkan ke
index.html, yang menampilkan token ID dan klaim yang telah diurai:{ "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****" }CatatanVerifikasi bahwa klaim berikut sesuai dengan konfigurasi penyedia identitas OIDC dari Langkah 1: buat penyedia identitas OIDC di Alibaba Cloud. Ketidaksesuaian nilai akan menyebabkan panggilan API AssumeRoleWithOIDC gagal.
-
iss: Harus persis sesuai dengan issuer URL.
-
aud: Harus persis sesuai dengan client ID.
-
-
Salin nilai
idTokendari halaman tersebut.
Langkah 5: Tukar token OIDC dengan token STS
Panggil AssumeRoleWithOIDC untuk menukar token OIDC dari Langkah 4 dengan token STS.
Contoh permintaan:
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 {
// Metode akses anonim (memerlukan dukungan API)
AnonymousCredentialProvider provider = AnonymousCredentialProvider.create();
// Konfigurasikan Client
AsyncClient client = AsyncClient.builder()
.region("cn-hangzhou") // ID Wilayah
.credentialsProvider(provider)
// Ganti konfigurasi tingkat klien, seperti endpoint dan parameter permintaan HTTP.
.overrideConfiguration(
ClientOverrideConfiguration.create()
// Untuk endpoint, lihat https://api.aliyun.com/product/Sts
.setEndpointOverride("sts.cn-hangzhou.aliyuncs.com")
)
.build();
String idToken = "eyJraWQiOiItbUF****"; // token id OIDC
// Pengaturan parameter untuk permintaan API
AssumeRoleWithOIDCRequest assumeRoleWithOIDCRequest = AssumeRoleWithOIDCRequest.builder()
.OIDCToken(idToken)
.roleArn("acs:ram::173305794806****:role/testoidc")
.OIDCProviderArn("acs:ram::173305794806****:oidc-provider/Okta")
.roleSessionName("test-oidc-session")
.build();
// Panggil API secara asinkron.
CompletableFuture<AssumeRoleWithOIDCResponse> response = client.assumeRoleWithOIDC(assumeRoleWithOIDCRequest);
// Dapatkan nilai kembali permintaan API secara sinkron
AssumeRoleWithOIDCResponse resp = response.get();
System.out.println("RequestId: " + resp.getBody().getRequestId());
System.out.println("ARN peran yang diasumsikan: " + 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("Respons sukses: " + new Gson().toJson(resp.getBody()));
// Terakhir, tutup klien
client.close();
}
}
Contoh respons:
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****"
}
Objek Credentials berisi token STS.
Langkah 6: Gunakan token STS untuk mengakses sumber daya
Gunakan token STS dari Langkah 5 untuk mengakses sumber daya Alibaba Cloud dalam cakupan izin peran tersebut.