All Products
Search
Document Center

Resource Access Management:Dapatkan informasi pengguna dengan menggunakan OIDC

Last Updated:Mar 06, 2026

OpenID Connect (OIDC) adalah lapisan protokol autentikasi yang dibangun di atas OAuth 2.0. Topik ini menjelaskan cara mendapatkan informasi pengguna melalui OIDC.

Prasyarat

Aplikasi web telah dibuat, lengkap dengan nama, cakupan OAuth, dan URL callback yang telah ditentukan. Rahasia aplikasi juga telah dibuat. Untuk informasi selengkapnya, lihat Buat aplikasi, Kelola cakupan OAuth, dan Buat rahasia aplikasi.

Istilah

Istilah

Deskripsi

ID token

OIDC dapat menerbitkan ID token pengguna ke suatu aplikasi. ID token dapat digunakan untuk mendapatkan informasi pengguna, seperti username dan nama logon. ID token tidak dapat digunakan untuk mengakses resource Alibaba Cloud.

OIDC Discovery Endpoint

OIDC menyediakan endpoint yang berbeda untuk tujuan yang berbeda. Discovery Endpoint berisi informasi konfigurasi yang diperlukan oleh OIDC.

Catatan

Discovery Endpoint menyediakan sekumpulan kunci dalam dokumen JSON. Kunci-kunci tersebut berisi informasi tentang penyedia OIDC, seperti tipe respons yang didukung oleh OIDC, nilai penerbit token, endpoint kunci publik penandatanganan ID token, dan algoritma penandatanganan.

Sebagai penyedia OIDC, Alibaba Cloud menyediakan Discovery Endpoint berikut untuk menyederhanakan konfigurasi: https://oauth.alibabacloud.com/.well-known/openid-configuration.

Contoh berikut menunjukkan isi Discovery Endpoint:

{
  "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"
}

Proses

IODC基本流程

  1. Pengguna masuk ke aplikasi melalui browser.

  2. Aplikasi mengalihkan pengguna ke layanan OIDC Alibaba Cloud dan mengirimkan URL aplikasi ke browser.

    Catatan

    Jika pengguna belum masuk ke Alibaba Cloud, aplikasi akan mengalihkannya ke halaman logon Alibaba Cloud.

  3. Pengguna masuk ke layanan OIDC Alibaba Cloud melalui browser dan meminta kode otorisasi.

  4. Layanan OIDC Alibaba Cloud mengembalikan kode otorisasi ke browser.

  5. Aplikasi meminta ID token yang sesuai dengan pengguna dari layanan OIDC Alibaba Cloud, dengan menyertakan kode otorisasi dalam permintaan tersebut.

  6. Layanan OIDC Alibaba Cloud mengembalikan ID token dan access token ke aplikasi. Aplikasi dapat menggunakan salah satu token tersebut untuk mendapatkan informasi pengguna.

Contoh 1: Dapatkan kunci publik penandatanganan ID token

Permintaan contoh

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 signature JWT ID token

ID token yang diterbitkan oleh Alibaba Cloud merupakan JWT yang ditandatangani menggunakan algoritma RS256 sesuai standar JWS. Saat meminta informasi pengguna, aplikasi harus memvalidasi hal-hal berikut pada ID token:

  • Signature token: Aplikasi memverifikasi validitas ID token menggunakan kunci publik penandatanganan OAuth yang diperoleh dalam Contoh 1: Dapatkan kunci publik penandatanganan ID token.

    Kunci publik OAuth secara rutin mengalami rotasi. Perhatikan hal-hal berikut saat memperoleh kunci publik tersebut:

    • Jangan cache atau menyimpan kunci publik untuk penggunaan berikutnya. Ambil kunci publik setiap kali melakukan permintaan.

    • Saat terjadi rotasi kunci publik, beberapa kunci publik yang valid dapat berlaku secara bersamaan. Gunakan semua kunci publik tersebut secara berurutan untuk memverifikasi signature hingga verifikasi berhasil. Jangan membatasi jumlah kunci publik yang digunakan untuk verifikasi.

Permintaan contoh

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");
}
  • Validitas token: Alibaba Cloud memeriksa waktu penerbitan dan periode validitas ID token.

  • Penerima token: Alibaba Cloud mencegah penggunaan ID token yang diterbitkan untuk aplikasi lain pada aplikasi ini.

Contoh 3: Uraikan ID token untuk mendapatkan informasi pengguna

  • Parameter respons

    • Parameter header

      Parameter

      Deskripsi

      Cakupan OAuth yang diperlukan

      alg

      Algoritma penandatanganan.

      openid

      kid

      Kunci publik yang digunakan untuk memvalidasi ID token. Anda harus menggunakan kunci ini untuk memvalidasi signature dan mencegah ID token Anda dimanipulasi.

      openid

    • Parameter badan

      Parameter

      Deskripsi

      Cakupan OAuth yang diperlukan

      exp

      Timestamp saat token kedaluwarsa.

      openid

      sub

      String unik yang mengidentifikasi pengguna. String ini tidak berisi UID dan username pengguna.

      Catatan

      Jika pengguna mengasumsikan peran Resource Access Management (RAM), nilai parameter sub dihasilkan berdasarkan <RoleId:RoleSessionName>. Nilainya unik dan dihasilkan untuk setiap pengguna.

      openid

      aud

      Penerima token, yaitu ID aplikasi OAuth.

      openid

      iss

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

      openid

      iat

      Timestamp saat token diterbitkan.

      openid

      type

      Tipe pengguna. Nilai yang valid:

      • account: akun Alibaba Cloud

      • user: RAM user.

      • role: RAM role.

      profile

      name

      Nama tampilan pengguna. Nilai yang valid:

      • Jika menggunakan RAM user, nilainya adalah nama tampilan RAM user tersebut.

      • Jika menggunakan RAM role, nilainya dalam format <RoleName:RoleSessionName>.

      Catatan

      Parameter ini hanya dikembalikan jika permintaan diajukan oleh RAM user atau RAM role.

      profile

      upn

      Nama logon RAM user.

      Catatan

      Parameter ini hanya dikembalikan jika permintaan diajukan oleh RAM user.

      profile

      login_name

      Nama logon akun Alibaba Cloud.

      Catatan

      Parameter ini hanya dikembalikan jika permintaan diajukan oleh akun Alibaba Cloud.

      profile

      aid

      ID akun Alibaba Cloud tempat pengguna tersebut berada.

      aliuid

      uid

      ID pengguna. Nilai yang valid:

      • Jika menggunakan akun Alibaba Cloud, nilainya sama dengan nilai parameter aid.

      • Jika menggunakan RAM user, nilainya adalah ID RAM user tersebut.

      • Jika menggunakan RAM role, nilainya adalah ID RAM role tersebut.

      aliuid

  • Respons contoh

    • Header respons contoh

      {
        "alg": "RS256",
        "kid": "JC9wxzrhqJ0gtaCEt2QLUfevEUIwltFhui4O1bh****"
      }
    • Badan respons contoh

      Untuk keperluan demonstrasi, respons contoh berikut menunjukkan ID token sebelum dikodekan. Dalam skenario aktual, ID token yang dikembalikan telah dikodekan. Untuk informasi selengkapnya, lihat Contoh 2: Verifikasi signature JWT ID token.

      • Badan respons contoh dari permintaan yang diajukan oleh akun Alibaba Cloud

        {
          "exp": 1517539523,
          "sub": "123456789012****",
          "aud": "4567890123456****",
          "iss": "https://oauth.alibabacloud.com",
          "iat": 1517535923,
          "type": "account",
          "login_name":"alice@example.com", //Nama logon akun Alibaba Cloud.
          "aid": "123456789012****", //ID akun Alibaba Cloud.
          "uid": "123456789012****" //ID akun Alibaba Cloud.
        }
      • Contoh badan respons dari permintaan yang diinisiasi oleh Pengguna RAM

        {
          "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 logon RAM user.
          "aid": "123456789012****", //ID akun Alibaba Cloud tempat RAM user tersebut berada.
          "uid": "234567890123****" //ID RAM user.
        }
      • Badan respons contoh dari permintaan yang diajukan oleh RAM role

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

Contoh 4: Dapatkan informasi pengguna dengan menggunakan access token dan operasi UserInfo

Setelah memperoleh access token, Anda dapat memanggil operasi UserInfo untuk mendapatkan informasi pengguna. Operasi UserInfo hanya dapat dipanggil menggunakan access token, dan respons yang diberikan tidak dikodekan.

Catatan

Dalam skenario penggunaan OIDC yang sebenarnya, access token tetap dikembalikan meskipun hanya cakupan openid, aliuid, dan profile yang ditentukan. Access token tersebut hanya dapat digunakan untuk memanggil operasi UserInfo.

Endpoint untuk operasi UserInfo adalah: https://oauth.alibabacloud.com/v1/userinfo.

Permintaan contoh

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

Parameter respons

Parameter

Deskripsi

Cakupan OAuth yang diperlukan

sub

String unik yang mengidentifikasi pengguna. String ini tidak berisi UID dan username pengguna.

openid

type

Tipe pengguna.

profile

name

Nama tampilan pengguna.

Catatan

Parameter ini hanya dikembalikan jika permintaan diajukan oleh RAM user atau RAM role.

profile

upn

Nama logon RAM user.

Catatan

Parameter ini hanya dikembalikan jika permintaan diajukan oleh RAM user.

profile

login_name

Nama logon akun Alibaba Cloud.

Catatan

Parameter ini hanya dikembalikan jika permintaan diajukan oleh akun Alibaba Cloud.

profile

aid

ID akun Alibaba Cloud tempat pengguna tersebut berada.

aliuid

uid

ID pengguna.

aliuid

Contoh badan respons

  • Badan respons contoh dari permintaan yang diajukan oleh akun Alibaba Cloud

    HTTP/1.1 200 OK
    Content-Type: application/json
    {
      "sub": "123456789012****", 
      "type": "account",
      "login_name":"alice@example.com", //Nama logon akun Alibaba Cloud.
      "aid": "123456789012****", //ID akun Alibaba Cloud.
      "uid": "123456789012****" //ID akun Alibaba Cloud.
    }
  • Badan respons contoh dari permintaan yang diajukan oleh 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 logon RAM user.
      "aid": "123456789012****", //ID akun Alibaba Cloud tempat RAM user tersebut berada.
      "uid": "234567890123****" //ID RAM user.
    }
  • Badan respons contoh dari permintaan yang diajukan oleh 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 tersebut berada.
      "uid": "300800165472****" //ID RAM role.
    }