Topik ini menjelaskan cara mengimplementasikan Single Sign-On (SSO) berbasis peran antara Okta dan Alibaba Cloud menggunakan OpenID Connect (OIDC). Metode ini memungkinkan aplikasi di Okta untuk mengakses sumber daya Alibaba Cloud secara aman menggunakan kredensial identitas sementara yang disediakan dalam bentuk token Layanan Keamanan (STS).
Prasyarat
Daftarkan aplikasi OIDC di Okta dan peroleh URL penerbit (issuer URL) serta ID Klien (Client ID) aplikasi tersebut. Data berikut digunakan dalam contoh ini:
URL Penerbit: https://dev-xxxxxx.okta.com
ID Klien: 0oa294vi1vJoClev****
Langkah 1: Buat Penyedia Identitas OIDC di Alibaba Cloud
Pada langkah ini, Anda membuat penyedia identitas (IdP) OIDC bernama TestOidcProvider. Atur Issuer URL menjadi https://dev-xxxxxx.okta.com dan Client ID menjadi 0oa294vi1vJoClev****.
Masuk ke Konsol Resource Access Management (RAM) 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, atur informasi IdP.
Parameter
Deskripsi
IdP Name
Nama harus unik dalam satu Akun Alibaba Cloud.
Issuer URL
URL penerbit yang disediakan oleh IdP eksternal. URL penerbit harus dimulai dengan
httpsdan merupakan URL yang valid. URL tidak boleh berisi parameter kueri setelah tanda tanya (?), segmen fragmen yang ditandai dengan tanda pagar (#), atau informasi log masuk yang ditandai dengan tanda at (@).Verification Fingerprint
Untuk mencegah URL penerbit dibajak atau dimanipulasi, konfigurasikan sidik jari verifikasi yang dihasilkan dari sertifikat CA HTTPS IdP eksternal.
Setelah Anda memasukkan Issuer URL, klik Get Fingerprint. Alibaba Cloud akan membantu Anda menghitung sidik jari verifikasi secara otomatis. Kami menyarankan agar Anda juga menghitungnya secara lokal dan membandingkan hasilnya. Untuk informasi selengkapnya, lihat Dapatkan sidik jari Penyedia Identitas OIDC menggunakan OpenSSL. Jika sidik jari tidak cocok, URL penerbit mungkin sedang diserang. Pastikan URL tersebut dan masukkan sidik jari yang benar.
CatatanJika Anda berencana untuk memutar sertifikat IdP Anda, hasilkan sidik jari sertifikat baru dan tambahkan ke informasi OIDC IdP di Alibaba Cloud sebelum rotasi. Tunggu setidaknya satu hari sebelum melakukan rotasi sertifikat. Setelah Anda memastikan bahwa sertifikat baru dapat digunakan untuk mendapatkan token Security Token Service (STS), Anda dapat menghapus sidik jari lama.
Client ID
Saat Anda mendaftarkan aplikasi Anda ke IdP eksternal, ID klien akan dihasilkan. Anda harus menggunakan ID klien ini saat meminta token OIDC dari IdP eksternal. Token OIDC yang diterbitkan berisi ID klien ini di bidang
aud. Saat membuat OIDC IdP, konfigurasikan ID klien ini. Saat Anda menggunakan token OIDC untuk mendapatkan token STS, Alibaba Cloud memverifikasi bahwa ID klien di bidangaudpada token OIDC cocok dengan ID klien yang dikonfigurasi untuk OIDC IdP. Anda hanya dapat mengasumsikan peran jika ID klien tersebut cocok.Jika Anda memiliki beberapa aplikasi yang perlu mengakses Alibaba Cloud, Anda dapat mengonfigurasi beberapa ID klien. Anda dapat menambahkan maksimal 50 ID klien.
Earliest Issuance Time
Token OIDC yang diterbitkan sebelum waktu ini tidak dapat digunakan untuk mendapatkan token STS.
Default: 12 jam. Nilai yang valid: 1 hingga 168 jam.
Remarks
Deskripsi IdP.
Klik Create IdP.
Langkah 2: Buat Peran RAM untuk OIDC IdP di Alibaba Cloud
Pada langkah ini, buat peran RAM bernama testoidc dan pilih TestOidcProvider, yang telah Anda buat di Langkah 1, sebagai penyedia identitas.
Masuk ke Konsol RAM sebagai pengguna RAM yang memiliki hak administratif.
Di panel navigasi sebelah kiri, pilih .
Pada halaman Roles, klik Create Role.

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

Tentukan OIDC IdP di editor.
Editor mendukung mode Visual editing dan JSON.
Editor visual
Tentukan OIDC IdP tertentu untuk elemen Principal.


JSON
Tentukan OIDC IdP untuk bidang
Federateddari parameterPrincipaldan konfigurasikan parameterCondition.{ "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****" ] } } } ] }
Tentukan kondisi di editor.
Tabel berikut mencantumkan kunci kondisi tingkat layanan yang didukung.
Kunci kondisi
Deskripsi
Wajib
Contoh
oidc:issPenerbit. Anda hanya dapat mengasumsikan peran RAM jika bidang iss pada token OIDC yang ingin Anda gunakan untuk mengasumsikan peran RAM memenuhi kondisi ini.
Operator kondisional harus StringEquals. Nilainya harus berupa URL penerbit yang Anda tentukan untuk OIDC IdP yang dipilih. Anda dapat menentukan kondisi ini untuk memastikan bahwa Anda hanya dapat menggunakan token OIDC untuk mengasumsikan peran RAM jika token OIDC tersebut diterbitkan oleh IdP tepercaya.
Ya
https://dev-xxxxxx.okta.com
oidc:audAudience. Anda hanya dapat mengasumsikan peran RAM jika bidang aud pada token OIDC yang ingin Anda gunakan untuk mengasumsikan peran RAM memenuhi kondisi ini.
Operator kondisional harus StringEquals. Nilainya dapat berupa satu atau beberapa ID klien yang Anda tentukan untuk OIDC IdP yang dipilih. Anda dapat menentukan kondisi ini untuk memastikan bahwa Anda hanya dapat menggunakan token OIDC untuk mengasumsikan peran RAM jika token OIDC tersebut dihasilkan menggunakan ID klien yang Anda tentukan.
Ya
0oa294vi1vJoClev****
oidc:subSubjek. Anda hanya dapat mengasumsikan peran RAM jika bidang sub pada token OIDC yang ingin Anda gunakan untuk mengasumsikan peran RAM memenuhi kondisi ini.
Operator kondisional dapat berupa string dari semua jenis. Nilainya dapat mencakup hingga 10 subjek. Anda dapat menentukan kondisi ini untuk lebih membatasi identitas yang dapat Anda gunakan untuk mengasumsikan peran RAM. Anda juga dapat tidak menentukan kondisi ini.
Tidak
00u294e3mzNXt4Hi****
Pada kotak dialog Create Role, konfigurasikan parameter Role Name, lalu klik OK.
Langkah 3: Berikan izin kepada peran RAM
Berikan izin kepada peran RAM bernama testoidc yang telah Anda buat di Langkah 2 untuk mengakses sumber daya Alibaba Cloud sesuai kebutuhan.
Masuk ke Konsol RAM sebagai administrator RAM.
Di panel navigasi sebelah kiri, pilih .
Pada halaman Roles, temukan peran RAM yang ingin Anda kelola, lalu klik Grant Permission di kolom Actions.

Anda juga dapat memilih beberapa peran RAM dan mengklik Grant Permission di bagian bawah daftar peran RAM untuk memberikan izin ke beberapa peran RAM sekaligus.
Pada panel Grant Permission, berikan izin kepada peran RAM.
Konfigurasikan parameter Resource Scope.
Account: Otorisasi berlaku untuk Akun Alibaba Cloud saat ini.
Resource Group: Otorisasi berlaku untuk kelompok sumber daya tertentu.
CatatanJika Anda memilih Resource Group untuk parameter Resource Scope, pastikan layanan cloud yang diperlukan mendukung kelompok sumber daya. Untuk informasi selengkapnya, lihat Layanan yang bekerja dengan Resource Group.
Konfigurasikan parameter Principal.
Principal adalah peran RAM yang ingin Anda berikan izinnya. Peran RAM saat ini dipilih secara otomatis.
Konfigurasikan parameter Policy.
Kebijakan adalah seperangkat izin akses. Anda dapat memilih beberapa kebijakan sekaligus.
Kebijakan sistem: kebijakan yang dibuat oleh Alibaba Cloud. Anda dapat menggunakan tetapi tidak dapat mengubah kebijakan ini. Pembaruan versi kebijakan dikelola oleh Alibaba Cloud. Untuk informasi selengkapnya, lihat Layanan yang bekerja dengan RAM.
CatatanSistem secara otomatis mengidentifikasi kebijakan sistem berisiko tinggi, seperti AdministratorAccess dan AliyunRAMFullAccess. Kami menyarankan agar Anda tidak memberikan izin yang tidak perlu dengan menyambungkan kebijakan berisiko tinggi.
Kebijakan kustom: Anda dapat mengelola dan memperbarui kebijakan kustom sesuai kebutuhan bisnis Anda. Anda dapat membuat, memperbarui, dan menghapus kebijakan kustom. Untuk informasi selengkapnya, lihat Buat kebijakan kustom.
Klik Grant permissions.
Klik Close.
Langkah 4: Terbitkan token OIDC di Okta
Alibaba Cloud tidak mendukung login konsol menggunakan OpenID Connect (OIDC). Anda harus menggunakan akses programatik untuk menyelesaikan alur Single Sign-On (SSO) OIDC. Untuk mendapatkan token OIDC dari penyedia identitas (IdP) OIDC seperti Okta, Anda harus menggunakan alur OAuth 2.0 standar. OAuth mendukung beberapa alur, seperti Authorization Code Flow yang umum.
Contoh berikut didasarkan pada tutorial resmi Okta Sign in to your SPA with AuthJS dan menunjukkan cara mendapatkan token OIDC dari Okta.
Ikuti tutorial Okta untuk membuat aplikasi dan mengonfigurasi proyek.
Uji proyek di browser. Aplikasi secara otomatis mengarahkan ke halaman login Okta. Setelah Anda masuk dan menyelesaikan autentikasi multi-faktor (MFA), halaman akan dialihkan ke
index.html. Halaman menampilkan Token ID untuk pengguna saat ini dan klaim yang diurai, seperti yang ditunjukkan di bawah ini:{ "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****" }CatatanDari klaim yang ditampilkan di halaman, temukan properti berikut. Pastikan properti tersebut sesuai dengan informasi OIDC IdP yang Anda konfigurasi di Langkah 1: Buat Penyedia Identitas OIDC di Alibaba Cloud. Jika tidak sesuai, pemanggilan operasi API AssumeRoleWithOIDC akan gagal.
iss: Harus persis sama dengan Issuer URL.
aud: Harus persis sama dengan Client ID.
Salin nilai
idTokendari halaman dan simpan.
Langkah 5: Gunakan token OIDC untuk mendapatkan token STS
Panggil operasi API AssumeRoleWithOIDC untuk mendapatkan token STS. Dalam permintaan, tentukan token OIDC (Token ID) yang Anda peroleh di Langkah 4.
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();
// Konfigurasi Klien
AsyncClient client = AsyncClient.builder()
.region("cn-hangzhou") // ID Wilayah
.credentialsProvider(provider)
// Menulis ulang konfigurasi tingkat klien, dapat mengatur Titik akhir, parameter permintaan Http, dll.
.overrideConfiguration(
ClientOverrideConfiguration.create()
// Untuk titik akhir, 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();
// Mendapatkan nilai kembali permintaan API secara asinkron
CompletableFuture<AssumeRoleWithOIDCResponse> response = client.assumeRoleWithOIDC(assumeRoleWithOIDCRequest);
// Mendapatkan 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("Kredensial AccessKeyId: " + resp.getBody().getCredentials().getAccessKeyId());
System.out.println("Kredensial AccessKeySecret: " + resp.getBody().getCredentials().getAccessKeySecret());
System.out.println("Tanggapan sukses: " + new Gson().toJson(resp.getBody()));
// Terakhir, tutup klien
client.close();
}
}
Contoh tanggapan:
RequestId: 5EB6E605-15EA-5D96-941D-2C62DC99****
ARN peran yang diasumsikan: acs:ram::173305794806****:role/testoidc/test-oidc-session
Kredensial AccessKeyId: STS.NZXMTBGTTHLW74AMVYKou****
Kredensial AccessKeySecret: FdrYjJwTCfFfMdY4APdHsjGL9fH5RSZCtRyYMJED****
Tanggapan sukses:
{
"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 Alibaba Cloud
Gunakan token STS yang Anda peroleh di Langkah 5 untuk mengakses sumber daya Alibaba Cloud.