All Products
Search
Document Center

Resource Access Management:Dapatkan informasi pengguna dengan OIDC

Last Updated:Jun 04, 2026

OpenID Connect (OIDC) adalah lapisan identitas di atas OAuth 2.0. Aplikasi Anda dapat menggunakan OIDC untuk memperoleh informasi tentang pengguna yang masuk ke Alibaba Cloud.

Prasyarat

Anda telah menyelesaikan tugas-tugas berikut: Create an application, Manage OAuth scopes, dan Create a client secret.

Konsep utama

Concept

Description

ID token

OIDC mengeluarkan ID token yang merepresentasikan pengguna yang telah masuk. Token tersebut berisi informasi pengguna seperti nama dan nama login, tetapi tidak dapat mengakses layanan Alibaba Cloud.

OIDC discovery endpoint

Protokol OIDC mendefinisikan beberapa endpoint. Endpoint discovery berisi seluruh konfigurasi OIDC, sehingga menyederhanakan integrasi bagi developer.

Catatan

Endpoint discovery mengembalikan dokumen JSON berisi metadata penyedia, termasuk jenis respons yang didukung, nilai issuer, URL kunci publik untuk verifikasi tanda tangan ID token, serta algoritma tanda tangan yang didukung.

Alibaba Cloud OIDC discovery endpoint: https://oauth.alibabacloud.com/.well-known/openid-configuration.

Contoh respons dari endpoint discovery:

{
  "code_challenge_methods_supported": [
    "plain",
    "S256"
  ],
  "subject_types_supported": [
    "public"
  ],
  "response_types_supported": [
    "code"
  ],
  "issuer": "https://oauth.alibabacloud.com",
  "jwks_uri": "https://oauth.alibabacloud.com/v1/keys",
  "revocation_endpoint": "https://oauth.alibabacloud.com/v1/revoke",
  "token_endpoint": "https://oauth.alibabacloud.com/v1/token",
  "id_token_signing_alg_values_supported": [
    "RS256"
  ],
  "scopes_supported": [
    "openid",
    "aliuid",
    "profile"
  ],
  "authorization_endpoint": "https://signin.alibabacloud.com/oauth2/v1/auth"
}

Cara kerja

OIDC workflow

  1. Pengguna masuk ke aplikasi dari browser.

  2. Aplikasi Anda mengarahkan browser pengguna ke layanan OIDC Alibaba Cloud.

    Catatan

    Jika pengguna belum masuk, permintaan akan dialihkan lebih lanjut ke layanan sign-in Alibaba Cloud.

  3. Pengguna masuk ke Alibaba Cloud dan memberikan otorisasi kepada aplikasi Anda.

  4. Layanan OIDC Alibaba Cloud mengarahkan kembali browser pengguna ke aplikasi Anda, menyertakan kode otorisasi.

  5. Aplikasi Anda menukar kode otorisasi tersebut dengan ID token dari layanan OIDC Alibaba Cloud.

  6. Layanan OIDC Alibaba Cloud mengembalikan ID token dan access token ke aplikasi. Aplikasi kemudian dapat memperoleh informasi pengguna baik melalui ID token maupun access token.

    Kasus penggunaan umum:

Contoh 1: Dapatkan kunci publik tanda tangan

Contoh permintaan:

private List getSignPublicKey() {
  HttpResponse response = HttpClientUtils.doGet("https://oauth.alibabacloud.com/v1/keys");
  List rsaKeyList = new ArrayList();
  if (response.getCode() == 200 && response.isSuccess()) {
    String keys = JSON.parseObject(response.getData()).getString("keys");
    try {
      JSONArray publicKeyList = JSON.parseArray(keys);
      for (Object object : publicKeyList) {
        RSAKey rsaKey = RSAKey.parse(JSONObject.toJSONString(object));
        rsaKeyList.add(rsaKey);
      }
      return rsaKeyList;
    } catch (Exception e) {
      LOG.info(e.getMessage());
    }
  }
  LOG.info("GetSignPublicKey failed:{}", response.getData());
  throw new AuthenticationException(response.getData());
}                    

Contoh 2: Verifikasi tanda tangan JWT

ID token Alibaba Cloud adalah JSON Web Token (JWT) yang ditandatangani. Algoritma tanda tangan adalah RS256, sebagaimana didefinisikan oleh standar JWS. Validasi setiap ID token dengan memeriksa:

  • Validasi tanda tangan: Gunakan kunci publik layanan OAuth (Contoh 1) untuk memverifikasi keaslian dan integritas ID token.

    Layanan OAuth melakukan rotasi kunci publik secara berkala. Saat memperoleh kunci publik:

    • Ambil kunci publik per permintaan. Jangan menyimpannya dalam cache jangka panjang.

    • Selama rotasi kunci, layanan mungkin mengembalikan beberapa kunci yang valid. Coba setiap kunci hingga salah satunya berhasil memverifikasi tanda tangan. Jangan mengasumsikan jumlah kunci tetap.

    Contoh permintaan:

    public boolean verifySign(SignedJWT signedJWT) {
      List publicKeyList = getSignPublicKey();
      RSAKey rsaKey = null;
      for (RSAKey key : publicKeyList) {
        if (signedJWT.getHeader().getKeyID().equals(key.getKeyID())) {
          rsaKey = key;
        }
      }
      if (rsaKey != null) {
        try {
          RSASSAVerifier verifier = new RSASSAVerifier(rsaKey.toRSAPublicKey());
          if (signedJWT.verify(verifier)) {
            return true;
          }
        } catch (Exception e) {
          LOG.info("Verify exception:{}", e.getMessage());
        }
      }
      throw new AuthenticationException("Can't verify signature for id token");
    }
  • Validasi masa berlaku: Periksa apakah waktu penerbitan dan waktu kedaluwarsa token valid.

  • Validasi audience: Pastikan klaim aud sesuai dengan client ID aplikasi Anda.

Contoh 3: Uraikan ID token

  • Parameter respons

    • Header claims

      Parameter

      Description

      OAuth scope

      alg

      Algoritma tanda tangan.

      openid

      kid

      ID kunci publik yang digunakan untuk menandatangani token. Gunakan kunci ini untuk memverifikasi tanda tangan dan mencegah manipulasi.

      openid

    • Body claims

      Parameter

      Description

      OAuth scope

      exp

      Timestamp yang menunjukkan waktu kedaluwarsa token.

      openid

      sub

      Identifikasi unik dan stabil untuk pengguna yang telah masuk. Tidak mencakup informasi seperti UID Alibaba Cloud atau username.

      Catatan

      Jika pengguna yang masuk adalah RAM role, klaim sub dihasilkan dari <RoleId:RoleSessionName>. Setiap sesi role memiliki nilai sub sendiri.

      openid

      aud

      Audience token, yaitu client ID aplikasi Anda.

      openid

      iss

      Penerbit token. Nilainya adalah https://oauth.alibabacloud.com.

      openid

      iat

      Timestamp yang menunjukkan kapan token diterbitkan.

      openid

      type

      Jenis pengguna yang telah masuk. Nilai yang valid:

      • account: Akun Alibaba Cloud (akun utama).

      • user: RAM user.

      • role: RAM role.

      profile

      name

      Nama tampilan pengguna yang telah masuk. Nilai yang valid:

      • Untuk RAM user: nama tampilan RAM user tersebut.

      • Untuk RAM role: <RoleName:RoleSessionName>.

      Catatan

      Klaim ini hanya dikembalikan untuk RAM user atau RAM role.

      profile

      upn

      Nama login RAM user.

      Catatan

      Klaim ini hanya dikembalikan untuk RAM user.

      profile

      login_name

      Nama login akun Alibaba Cloud (akun utama).

      Catatan

      Klaim ini hanya dikembalikan untuk akun Alibaba Cloud (akun utama).

      profile

      aid

      ID akun Alibaba Cloud tempat pengguna tersebut terdaftar.

      aliuid

      uid

      ID pengguna yang telah masuk. Nilai yang valid:

      • Untuk akun Alibaba Cloud (akun utama): ID akun Alibaba Cloud, yang sama dengan nilai aid.

      • Untuk RAM user: ID RAM user.

      • Untuk RAM role: ID RAM role.

      aliuid

  • Contoh respons

    • Contoh header

      {
        "alg": "RS256",
        "kid": "JC9wxzrhqJ0gtaCEt2QLUfevEUIwltFhui4O1bh****"
      }
    • Contoh body

      Contoh-contoh berikut menunjukkan muatan (payload) ID token yang telah didekode. Token aktual berupa string JWT terenkripsi tunggal yang harus diverifikasi (Contoh 2: Verifikasi tanda tangan JWT).

      • Contoh payload untuk akun Alibaba Cloud

        {
          "exp": 1517539523,
          "sub": "123456789012****",
          "aud": "4567890123456****",
          "iss": "https://oauth.alibabacloud.com",
          "iat": 1517535923,
          "type": "account",
          "login_name":"alice@example.com", // Nama login akun Alibaba Cloud
          "aid": "123456789012****", // ID akun Alibaba Cloud
          "uid": "123456789012****" // ID akun Alibaba Cloud
        }
      • Contoh payload untuk RAM user

        {
          "exp": 1517539523,
          "sub": "123456789012****",
          "aud": "4567890123456****",
          "iss": "https://oauth.alibabacloud.com",
          "iat": 1517535923,
          "type": "user",
          "name": "alice", // Nama tampilan RAM user
          "upn": "alice@example.onaliyun.com", // Nama login RAM user
          "aid": "123456789012****", // ID akun Alibaba Cloud tempat RAM user terdaftar
          "uid": "234567890123****" // ID RAM user
        }
      • Contoh payload untuk RAM role

        {
          "exp": 1517539523,
          "sub": "123456789012****",
          "aud": "4567890123456****",
          "iss": "https://oauth.alibabacloud.com",
          "iat": 1517535923,
          "type": "role",
          "name": "NetworkAdministrator:alice", // Nama tampilan RAM role
          "aid": "123456789012****", // ID akun Alibaba Cloud tempat RAM role terdaftar
          "uid": "300800165472****" // ID RAM role
        }

Contoh 4: Gunakan endpoint UserInfo

Anda juga dapat memanggil endpoint UserInfo dengan access token untuk mengambil informasi pengguna. Responsnya tidak dienkripsi.

Catatan

Meskipun Anda hanya meminta scope openid, aliuid, dan profile, access token tetap dikembalikan. Token ini hanya berlaku untuk endpoint UserInfo.

URL endpoint UserInfo adalah https://oauth.alibabacloud.com/v1/userinfo.

Contoh permintaan:

GET v1/userinfo HTTP/1.1
Host: oauth.alibabacloud.com
Authorization: Bearer SIAV32hkKG

Parameter respons:

Parameter

Description

OAuth scope

sub

Identifikasi unik dan stabil untuk pengguna yang telah masuk. Tidak mencakup informasi seperti UID Alibaba Cloud atau username.

openid

type

Jenis pengguna yang telah masuk.

profile

name

Nama tampilan pengguna yang telah masuk.

Catatan

Parameter ini hanya dikembalikan untuk RAM user atau RAM role.

profile

upn

Nama login RAM user.

Catatan

Parameter ini hanya dikembalikan untuk RAM user.

profile

login_name

Nama login akun Alibaba Cloud (akun utama).

Catatan

Parameter ini hanya dikembalikan untuk akun Alibaba Cloud (akun utama).

profile

aid

ID akun Alibaba Cloud tempat pengguna tersebut terdaftar.

aliuid

uid

ID pengguna yang telah masuk.

aliuid

Contoh respons:

  • Contoh respons untuk akun Alibaba Cloud

    HTTP/1.1 200 OK
    Content-Type: application/json
    {
      "sub": "123456789012****", 
      "type": "account",
      "login_name":"alice@example.com", // Nama login akun Alibaba Cloud
      "aid": "123456789012****", // ID akun Alibaba Cloud
      "uid": "123456789012****" // ID akun Alibaba Cloud
    }
  • Contoh respons untuk RAM user

    HTTP/1.1 200 OK
    Content-Type: application/json
    {
      "sub": "123456789012****", 
      "type": "user",  
      "name": "alice", // Nama tampilan RAM user
      "upn": "alice@example.onaliyun.com", // Nama login RAM user
      "aid": "123456789012****", // ID akun Alibaba Cloud tempat RAM user terdaftar
      "uid": "234567890123****" // ID RAM user
    }
  • Contoh respons untuk RAM role

    HTTP/1.1 200 OK
    Content-Type: application/json
    {
      "sub": "123456789012****", 
      "type": "role",
      "name": "NetworkAdministrator:alice", // Nama tampilan RAM role
      "aid": "123456789012****", // ID akun Alibaba Cloud tempat RAM role terdaftar
      "uid": "300800165472****" // ID RAM role
    }