All Products
Search
Document Center

Resource Access Management:Contoh: Gunakan OIDC untuk SSO berbasis peran

Last Updated:Jun 05, 2026

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****.

  1. Masuk ke RAM console sebagai administrator RAM.

  2. Di panel navigasi sebelah kiri, pilih Integrations > SSO.

  3. Pada tab Role-based SSO, klik tab OIDC, lalu klik Create IdP.

  4. 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.

    Catatan

    Sebelum 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 aud pada token OIDC yang diterbitkan. Selama pertukaran token OIDC ke token STS, Alibaba Cloud memverifikasi klaim aud terhadap 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.

  5. Klik Create IdP.

Langkah 2: Buat peran RAM untuk OIDC

Buat peran RAM bernama testoidc dan pilih penyedia identitas TestOidcProvider dari Langkah 1.

  1. Masuk ke RAM console sebagai administrator RAM.

  2. Di panel navigasi sebelah kiri, pilih Identities > Roles.

  3. Pada halaman Roles, klik Create Role.

    image

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

    image

  5. Di editor kebijakan, tentukan penyedia identitas OIDC.

    Tersedia dua mode:

    • Visual Editor

      Pada bagian Principal, tentukan penyedia identitas OIDC.

      image

      image

    • Script editor

      Pada bidang Principal Federated, tentukan penyedia OIDC dan konfigurasikan 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. Kondisi tingkat layanan yang didukung:

    Condition key

    Deskripsi

    Wajib

    Contoh

    oidc:iss

    URL issuer OIDC. Klaim iss dalam token harus sesuai dengan nilai ini.

    Gunakan StringEquals dengan URL issuer penyedia OIDC Anda.

    Ya

    https://dev-xxxxxx.okta.com

    oidc:aud

    Audience OIDC. Klaim aud dalam token harus sesuai dengan nilai ini.

    Gunakan StringEquals dengan satu atau beberapa client ID dari penyedia OIDC Anda.

    Ya

    0oa294vi1vJoClev****

    oidc:sub

    Subjek OIDC. Membatasi principal mana yang dapat mengasumsikan peran.

    Klaim sub dalam token harus sesuai dengan kondisi ini. Mendukung operator kondisi string apa pun dengan maksimal 10 nilai.

    Tidak

    00u294e3mzNXt4Hi****

  7. 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.

  1. Masuk ke RAM console sebagai administrator RAM.

  2. Di panel navigasi sebelah kiri, pilih Identities > Roles.

  3. Pada halaman Roles, klik nama peran RAM target.

  4. 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.

  5. 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.

  1. Ikuti tutorial Okta untuk membuat aplikasi dan mengonfigurasi proyek.

  2. 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****"
    }
    Catatan

    Verifikasi 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.

  3. Salin nilai idToken dari 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.