全部产品
Search
文档中心

Resource Access Management:Memperoleh Informasi Pengguna dengan Menggunakan OIDC

更新时间:Jun 27, 2025

OpenID Connect (OIDC) adalah lapisan protokol otentikasi yang dibangun di atas protokol Open Authorization (OAuth) 2.0. Topik ini menjelaskan cara memperoleh informasi pengguna menggunakan OIDC.

Prasyarat

Aplikasi web telah dibuat, dengan nama, ruang lingkup OAuth, dan URL panggilan balik yang telah ditentukan. Rahasia aplikasi juga telah dibuat. Untuk informasi lebih lanjut, lihat Buat Aplikasi, Tambahkan Ruang Lingkup OAuth, dan Buat Rahasia Aplikasi.

Istilah

Istilah

Deskripsi

Token ID

OIDC dapat menerbitkan token ID pengguna ke aplikasi. Token ID dapat digunakan untuk memperoleh informasi pengguna, seperti nama pengguna dan nama masuk. Token ID tidak dapat digunakan untuk mengakses sumber daya Alibaba Cloud.

Titik akhir Penemuan OIDC

OIDC menyediakan titik akhir yang berbeda untuk tujuan yang berbeda. Titik Akhir Penemuan berisi informasi konfigurasi yang diperlukan oleh OIDC.

Catatan

Titik Akhir Penemuan menyediakan satu set kunci dalam dokumen JSON. Kunci-kunci tersebut berisi informasi tentang penyedia OIDC, seperti tipe respons yang didukung oleh OIDC, nilai penerbit token, titik akhir kunci publik penandatanganan token ID, dan algoritma penandatanganan.

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

Berikut adalah contoh isi dari Titik Akhir Penemuan:

{
  "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 mengarahkan pengguna ke layanan OIDC Alibaba Cloud dan mengirimkan URL aplikasi ke browser.

    Catatan

    Jika pengguna belum masuk ke Alibaba Cloud, aplikasi akan mengarahkan pengguna ke halaman masuk 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 token ID yang sesuai dengan pengguna dari layanan OIDC Alibaba Cloud. Kode otorisasi diperlukan dalam permintaan ini.

  6. Layanan OIDC Alibaba Cloud mengembalikan token ID dan token akses ke aplikasi. Aplikasi dapat menggunakan token ID atau token akses untuk memperoleh informasi pengguna.

Contoh 1: Memperoleh kunci publik penandatanganan token ID

Permintaan Sampel

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 dari token ID

Token ID yang diterbitkan oleh Alibaba Cloud adalah JSON Web Token (JWT) yang ditandatangani. Algoritma penandatanganan RS256 yang sesuai dengan standar JWS digunakan. Saat aplikasi meminta informasi pengguna, aplikasi harus memvalidasi konten berikut dari token ID:

  • Tanda tangan token: Aplikasi memeriksa apakah token ID valid dengan menggunakan kunci publik OAuth yang diterbitkan dalam Contoh 1: Memperoleh Kunci Publik Penandatanganan Token ID.

    Kunci publik OAuth secara teratur diputar. Perhatikan poin-poin berikut saat Anda memperoleh kunci publik tersebut:

    • Jangan menyimpan cache atau menyimpan kunci publik untuk digunakan nanti. Peroleh kunci publik untuk setiap permintaan.

    • Selama pemutaran kunci publik, beberapa kunci publik valid ada. Semua kunci publik harus digunakan untuk memverifikasi tanda tangan secara berurutan hingga verifikasi tanda tangan berhasil. Jangan tentukan jumlah kunci publik yang dapat digunakan untuk memverifikasi tanda tangan.

Permintaan Sampel

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 ketika token ID diterbitkan dan periode validitas token ID.

  • Penerima token: Alibaba Cloud mencegah token ID yang diterbitkan untuk aplikasi lain diterbitkan ke aplikasi tersebut.

Contoh 3: Parsel token ID untuk memperoleh informasi pengguna

  • Parameter Respons

    • Parameter Header

      Parameter

      Deskripsi

      Ruang lingkup OAuth yang diperlukan

      alg

      Algoritma penandatanganan.

      openid

      kid

      Kunci publik yang digunakan untuk memvalidasi token ID. Anda harus menggunakan kunci ini untuk memvalidasi tanda tangan Anda dan mencegah token ID Anda dirusak.

      openid

    • Parameter Body

      Parameter

      Deskripsi

      Ruang lingkup OAuth yang diperlukan

      exp

      Timestamp ketika token kedaluwarsa.

      openid

      sub

      String unik yang menunjukkan pengguna. String ini tidak berisi UID dan nama pengguna.

      Catatan

      Jika pengguna mengasumsikan Peran RAM, nilai parameter sub dibuat berdasarkan <RoleId:RoleSessionName>. Nilainya unik dan dibuat untuk setiap pengguna.

      openid

      aud

      Penerima token, yaitu ID aplikasi OAuth.

      openid

      iss

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

      openid

      iat

      Timestamp ketika token diterbitkan.

      openid

      type

      Tipe pengguna. Nilai yang valid:

      • account: akun Alibaba Cloud

      • user: pengguna RAM.

      • role: peran RAM.

      profile

      name

      Nama tampilan pengguna. Nilai yang valid:

      • Jika pengguna RAM digunakan, nilainya adalah nama tampilan pengguna RAM.

      • Jika peran RAM digunakan, nilainya dalam format <RoleName:RoleSessionName>.

      Catatan

      Parameter ini hanya dikembalikan jika pengguna RAM atau peran RAM memulai permintaan.

      profile

      upn

      Nama masuk pengguna RAM.

      Catatan

      Parameter ini hanya dikembalikan jika pengguna RAM memulai permintaan.

      profile

      login_name

      Nama masuk akun Alibaba Cloud.

      Catatan

      Parameter ini hanya dikembalikan jika akun Alibaba Cloud memulai permintaan.

      profile

      aid

      ID akun Alibaba Cloud tempat pengguna tersebut berasal.

      aliuid

      uid

      ID pengguna. Nilai yang valid:

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

      • Jika pengguna RAM digunakan, nilainya adalah ID pengguna RAM.

      • Jika peran RAM digunakan, nilainya adalah ID peran RAM.

      aliuid

  • Respons Sampel

    • Header Respons Sampel

      {
        "alg": "RS256",
        "kid": "JC9wxzrhqJ0gtaCEt2QLUfevEUIwltFhui4O1bh****"
      }
    • Body Respons Sampel

      Untuk tujuan demonstrasi, respons sampel berikut menunjukkan token ID sebelum pengkodean. Dalam skenario nyata, token ID yang dikodekan dikembalikan. Untuk informasi lebih lanjut, lihat Contoh 2: Verifikasi Tanda Tangan JWT dari Token ID.

      • Body Respons Sampel dari Permintaan yang Dimulai oleh Akun Alibaba Cloud

        {
          "exp": 1517539523,
          "sub": "123456789012****",
          "aud": "4567890123456****",
          "iss": "https://oauth.alibabacloud.com",
          "iat": 1517535923,
          "type": "account",
          "login_name":"alice@example.com", //The logon name of the Alibaba Cloud account.
          "aid": "123456789012****", //The ID of the Alibaba Cloud account.
          "uid": "123456789012****" //The ID of the Alibaba Cloud account.
        }
      • Body Respons Sampel dari Permintaan yang Dimulai oleh Pengguna RAM

        {
          "exp": 1517539523,
          "sub": "123456789012****",
          "aud": "4567890123456****",
          "iss": "https://oauth.alibabacloud.com",
          "iat": 1517535923,
          "type": "user",
          "name": "alice", //The display name of the RAM user.
          "upn": "alice@example.onaliyun.com", //The logon name of the RAM user.
          "aid": "123456789012****", //The ID of the Alibaba Cloud account to which the RAM user belongs.
          "uid": "234567890123****" //The ID of the RAM user.
        }
      • Body Respons Sampel dari Permintaan yang Dimulai oleh Peran RAM

        {
          "exp": 1517539523,
          "sub": "123456789012****",
          "aud": "4567890123456****",
          "iss": "https://oauth.aliyun.com",
          "iat": 1517535923,
          "type": "role",
          "name": "NetworkAdministrator:alice", //The display name of the RAM role.
          "aid": "123456789012****", //The ID of the Alibaba Cloud account to which the RAM role belongs.
          "uid": "300800165472****" //The ID of the RAM role.
        }

Contoh 4: Memperoleh informasi pengguna menggunakan token akses dan operasi UserInfo

Setelah Anda memperoleh token akses, Anda dapat memanggil operasi UserInfo untuk memperoleh informasi pengguna. Operasi UserInfo hanya dapat dipanggil menggunakan token akses, dan informasi respons tidak dienkripsi.

Catatan

Dalam skenario penggunaan OIDC yang sebenarnya, token akses dapat dikembalikan meskipun hanya ruang lingkup openid, aliuid, dan profile yang ditentukan. Token akses yang dikembalikan hanya dapat digunakan untuk memanggil operasi UserInfo.

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

Permintaan Sampel

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

Parameter Respons

Parameter

Deskripsi

Ruang lingkup OAuth yang diperlukan

sub

String unik yang menunjukkan pengguna. String ini tidak berisi UID dan nama pengguna.

openid

type

Tipe pengguna.

profile

name

Nama tampilan pengguna.

Catatan

Parameter ini hanya dikembalikan jika pengguna RAM atau peran RAM memulai permintaan.

profile

upn

Nama masuk pengguna RAM.

Catatan

Parameter ini hanya dikembalikan jika pengguna RAM memulai permintaan.

profile

login_name

Nama masuk akun Alibaba Cloud.

Catatan

Parameter ini hanya dikembalikan jika akun Alibaba Cloud memulai permintaan.

profile

aid

ID akun Alibaba Cloud tempat pengguna tersebut berasal.

aliuid

uid

ID pengguna.

aliuid

Body Respons Sampel

  • Body Respons Sampel dari Permintaan yang Dimulai oleh Akun Alibaba Cloud

    HTTP/1.1 200 OK
    Content-Type: application/json
    {
      "sub": "123456789012****", 
      "type": "account",
      "login_name":"alice@example.com", //Nama masuk akun Alibaba Cloud.
      "aid": "123456789012****", //ID akun Alibaba Cloud.
      "uid": "123456789012****" //ID akun Alibaba Cloud.
    }
  • Body Respons Sampel dari Permintaan yang Dimulai oleh Pengguna RAM

    HTTP/1.1 200 OK
    Content-Type: application/json
    {
      "sub": "123456789012****", 
      "type": "user",  
      "name": "alice", //Nama tampilan pengguna RAM.
      "upn": "alice@example.onaliyun.com", //Nama masuk pengguna RAM.
      "aid": "123456789012****", //ID akun Alibaba Cloud tempat pengguna RAM berasal.
      "uid": "234567890123****" //ID pengguna RAM.
    }
  • Body Respons Sampel dari Permintaan yang Dimulai oleh Peran RAM

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