

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Bekerja dengan sumber identitas OIDC
<a name="identity-sources-oidc"></a>

Anda juga dapat mengonfigurasi IdP OpenID Connect (OIDC) yang sesuai sebagai sumber identitas penyimpanan kebijakan. Penyedia OIDC mirip dengan kumpulan pengguna Amazon Cognito: mereka JWTs menghasilkan sebagai produk otentikasi. Untuk menambahkan penyedia OIDC, Anda harus memberikan URL penerbit

Sumber identitas OIDC baru memerlukan informasi berikut:
+ URL penerbit. Izin Terverifikasi harus dapat menemukan `.well-known/openid-configuration` titik akhir di URL ini.
+ Catatan CNAME yang tidak termasuk kartu liar. Misalnya, tidak `a.example.com` dapat dipetakan ke`*.example.net`. Sebaliknya, tidak `*.example.com` dapat dipetakan ke. `a.example.net`
+ Jenis token yang ingin Anda gunakan dalam permintaan otorisasi. Dalam hal ini, Anda memilih **token Identity**.
+ Jenis entitas pengguna yang ingin Anda kaitkan dengan sumber identitas Anda, misalnya`MyCorp::User`.
+ Jenis entitas grup yang ingin Anda kaitkan dengan sumber identitas Anda, misalnya`MyCorp::UserGroup`.
+ Contoh token ID, atau definisi klaim dalam token ID.
+ Awalan yang ingin Anda terapkan ke entitas IDs pengguna dan grup. Di CLI dan API, Anda dapat memilih awalan ini. Di penyimpanan kebijakan yang Anda buat dengan opsi **Penyiapan **dengan API Gateway dan penyedia identitas** atau Penyiapan terpandu**, Izin Terverifikasi menetapkan awalan nama penerbit dikurangi`https://`, misalnya. `MyCorp::User::"auth.example.com|a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"`

Untuk informasi selengkapnya tentang penggunaan operasi API untuk mengotorisasi permintaan dari sumber OIDC, lihat. [Operasi API yang tersedia untuk otorisasi](authorization.md#authorization-operations)

Contoh berikut ini menunjukkan bagaimana Anda dapat membuat kebijakan yang memungkinkan akses ke laporan akhir tahun untuk karyawan di departemen akuntansi, memiliki klasifikasi rahasia, dan tidak berada di kantor satelit. Izin Terverifikasi memperoleh atribut ini dari klaim dalam token ID prinsipal.

Perhatikan bahwa saat mereferensikan grup di prinsipal, Anda harus menggunakan `in` operator agar kebijakan dapat dievaluasi dengan benar.

```
permit(
     principal in MyCorp::UserGroup::"MyOIDCProvider|Accounting", 
     action, 
     resource in MyCorp::Folder::"YearEnd2024" 
) when { 
     principal.jobClassification == "Confidential" &&
     !(principal.location like "SatelliteOffice*")
};
```

**Topics**
+ [Membuat Izin Terverifikasi Amazon Sumber identitas OIDC](oidc-create.md)
+ [Mengedit Izin Terverifikasi Amazon Sumber identitas OIDC](oidc-edit.md)
+ [Memetakan token OIDC ke skema](oidc-map-token-to-schema.md)
+ [Validasi klien dan audiens untuk penyedia OIDC](oidc-validation.md)

# Membuat Izin Terverifikasi Amazon Sumber identitas OIDC
<a name="oidc-create"></a>

Prosedur berikut menambahkan sumber identitas ke toko kebijakan yang ada.

Anda juga dapat membuat sumber identitas saat [membuat penyimpanan kebijakan baru](policy-stores-create.md) di konsol Izin Terverifikasi. Dalam proses ini, Anda dapat secara otomatis mengimpor klaim dalam token sumber identitas Anda ke atribut entitas. Pilih opsi **Pengaturan terpandu** atau **Siapkan dengan API Gateway dan penyedia identitas**. Opsi ini juga membuat kebijakan awal.

**catatan**  
**Sumber identitas** tidak tersedia di panel navigasi di sebelah kiri hingga Anda membuat toko kebijakan. Sumber identitas yang Anda buat terkait dengan penyimpanan kebijakan saat ini.

Anda dapat mengabaikan tipe entitas utama saat membuat sumber identitas dengan [create-identity-source](https://docs.aws.amazon.com/cli/latest/reference/verifiedpermissions/create-identity-source.html)di AWS CLI atau di API [CreateIdentitySource](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_CreateIdentitySource.html)Izin Terverifikasi. Namun, tipe entitas kosong menciptakan sumber identitas dengan tipe entitas`AWS::Cognito`. Nama entitas ini tidak kompatibel dengan skema penyimpanan kebijakan. Untuk mengintegrasikan Amazon Cognito identitas dengan skema penyimpanan kebijakan, Anda harus menyetel jenis entitas utama ke entitas penyimpanan kebijakan yang didukung.

------
#### [ Konsol Manajemen AWS ]

**Untuk membuat sumber identitas OpenID Connect (OIDC)**

1. Buka [konsol Izin Terverifikasi](https://console.aws.amazon.com/verifiedpermissions/). Pilih toko polis Anda.

1. Di panel navigasi di sebelah kiri, pilih **Sumber identitas**.

1. Pilih **Buat sumber identitas**.

1. Pilih penyedia **OIDC eksternal**.

1. Di **URL Penerbit**, masukkan URL penerbit OIDC Anda. Ini adalah titik akhir layanan yang menyediakan server otorisasi, kunci penandatanganan, dan informasi lain tentang penyedia Anda, misalnya. `https://auth.example.com` URL penerbit Anda harus meng-host dokumen penemuan OIDC di. `/.well-known/openid-configuration`

1. Pada **tipe Token**, pilih jenis OIDC JWT yang Anda ingin aplikasi Anda kirimkan untuk otorisasi. Untuk informasi selengkapnya, lihat [Memetakan token OIDC ke skema](oidc-map-token-to-schema.md).

1. Dalam **klaim token Peta ke entitas skema**, pilih **entitas Pengguna** dan **klaim Pengguna** untuk sumber identitas. **Entitas Pengguna** adalah entitas di toko kebijakan yang ingin Anda rujuk ke pengguna dari penyedia OIDC Anda. **Klaim Pengguna** adalah klaim, biasanya`sub`, dari ID atau token akses Anda yang memegang pengenal unik untuk entitas yang akan dievaluasi. Identitas dari IdP OIDC yang terhubung akan dipetakan ke tipe utama yang dipilih.

1. (Opsional) Dalam **klaim token Peta ke entitas skema**, pilih **entitas Grup** dan **klaim Grup** untuk sumber identitas. **Entitas Grup** adalah [induk](https://docs.cedarpolicy.com/overview/terminology.html#term-group) dari **entitas Pengguna**. Klaim grup dipetakan ke entitas ini. **Klaim Grup** adalah klaim, biasanya`groups`, dari ID atau token akses Anda yang berisi string, JSON, atau string nama grup pengguna yang dibatasi spasi untuk entitas yang akan dievaluasi. Identitas dari IdP OIDC yang terhubung akan dipetakan ke tipe utama yang dipilih.

1. Dalam **validasi - opsional**, masukkan klien IDs atau audiens URLs yang Anda ingin toko kebijakan Anda terima dalam permintaan otorisasi, jika ada.

1. Pilih **Buat sumber identitas**.

1. (Opsional) Jika toko kebijakan Anda memiliki skema, sebelum Anda dapat mereferensikan atribut yang Anda ekstrak dari identitas atau token akses dalam kebijakan Cedar Anda, Anda harus memperbarui skema Anda untuk membuat Cedar mengetahui jenis prinsipal yang dibuat oleh sumber identitas Anda. Penambahan skema itu harus menyertakan atribut yang ingin Anda referensikan dalam kebijakan Cedar Anda. Untuk informasi selengkapnya tentang pemetaan atribut token OIDC ke atribut utama Cedar, lihat. [Memetakan token OIDC ke skema](oidc-map-token-to-schema.md)

1. Buat kebijakan yang menggunakan informasi dari token untuk membuat keputusan otorisasi. Untuk informasi selengkapnya, lihat [Membuat kebijakan statis Izin Terverifikasi Amazon](policies-create.md).

Setelah Anda membuat sumber identitas, memperbarui skema, dan membuat kebijakan, gunakan `IsAuthorizedWithToken` agar Izin Terverifikasi membuat keputusan otorisasi. Untuk informasi selengkapnya, lihat [IsAuthorizedWithToken](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_IsAuthorizedWithToken.html)di *panduan referensi API Izin Terverifikasi Amazon*.

------
#### [ AWS CLI ]

**Untuk membuat sumber identitas OIDC**  
Anda dapat membuat sumber identitas dengan menggunakan [CreateIdentitySource](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_CreateIdentitySource.html)operasi. Contoh berikut membuat sumber identitas yang dapat mengakses identitas yang diautentikasi dari penyedia identitas OIDC (iDP).

1. Buat `config.txt` file yang berisi rincian berikut dari IDP OIDC untuk digunakan oleh `--configuration` parameter perintah. `create-identity-source`

   ```
   {
       "openIdConnectConfiguration": {
           "issuer": "https://auth.example.com",
           "tokenSelection": {
                   "identityTokenOnly": {
                           "clientIds":["1example23456789"],
                           "principalIdClaim": "sub"
                   },
           },
           "entityIdPrefix": "MyOIDCProvider",
           "groupConfiguration": {
                 "groupClaim": "groups",
                 "groupEntityType": "MyCorp::UserGroup"
           }
       }
   }
   ```

1. Jalankan perintah berikut untuk membuat sumber identitas OIDC.

   ```
   $ aws verifiedpermissions create-identity-source \
       --configuration file://config.txt \
       --principal-entity-type "User" \
       --policy-store-id 123456789012
   {
       "createdDate": "2023-05-19T20:30:28.214829+00:00",
       "identitySourceId": "ISEXAMPLEabcdefg111111",
       "lastUpdatedDate": "2023-05-19T20:30:28.214829+00:00",
       "policyStoreId": "PSEXAMPLEabcdefg111111"
   }
   ```

1. (Opsional) Jika toko kebijakan Anda memiliki skema, sebelum Anda dapat mereferensikan atribut yang Anda ekstrak dari identitas atau token akses dalam kebijakan Cedar Anda, Anda harus memperbarui skema Anda untuk membuat Cedar mengetahui jenis prinsipal yang dibuat oleh sumber identitas Anda. Penambahan skema itu harus menyertakan atribut yang ingin Anda referensikan dalam kebijakan Cedar Anda. Untuk informasi selengkapnya tentang pemetaan atribut token OIDC ke atribut utama Cedar, lihat. [Memetakan token OIDC ke skema](oidc-map-token-to-schema.md)

1. Buat kebijakan yang menggunakan informasi dari token untuk membuat keputusan otorisasi. Untuk informasi selengkapnya, lihat [Membuat kebijakan statis Izin Terverifikasi Amazon](policies-create.md).

Setelah Anda membuat sumber identitas, memperbarui skema, dan membuat kebijakan, gunakan `IsAuthorizedWithToken` agar Izin Terverifikasi membuat keputusan otorisasi. Untuk informasi selengkapnya, lihat [IsAuthorizedWithToken](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_IsAuthorizedWithToken.html)di *panduan referensi API Izin Terverifikasi Amazon*.

------

# Mengedit Izin Terverifikasi Amazon Sumber identitas OIDC
<a name="oidc-edit"></a>

Anda dapat mengedit beberapa parameter sumber identitas Anda setelah Anda membuatnya. Anda tidak dapat mengubah jenis sumber identitas, Anda harus menghapus sumber identitas dan membuat yang baru untuk beralih dari ke OIDC atau OIDC Amazon Cognito ke. Amazon Cognito Jika skema penyimpanan kebijakan Anda cocok dengan atribut sumber identitas Anda, perhatikan bahwa Anda harus memperbarui skema secara terpisah untuk mencerminkan perubahan yang Anda buat pada sumber identitas Anda.

------
#### [ Konsol Manajemen AWS ]

**Untuk memperbarui sumber identitas OIDC**

1. Buka [konsol Izin Terverifikasi](https://console.aws.amazon.com/verifiedpermissions/). Pilih toko polis Anda.

1. Di panel navigasi di sebelah kiri, pilih **Sumber identitas**.

1. Pilih ID sumber identitas yang akan diedit.

1. Pilih **Edit**.

1. Dalam **detail penyedia OIDC**, ubah **URL Penerbit sesuai kebutuhan**.

1. Dalam **klaim token Peta ke atribut skema**, ubah asosiasi antara klaim pengguna dan grup serta jenis entitas penyimpanan kebijakan, sesuai kebutuhan. Setelah mengubah jenis entitas, Anda harus memperbarui kebijakan dan atribut skema agar diterapkan pada tipe entitas baru.

1. Dalam **validasi Audiens**, tambahkan atau hapus nilai audiens yang ingin Anda terapkan.

1. Pilih **Simpan perubahan**.

Anda dapat menghapus sumber identitas dengan memilih tombol radio di sebelah sumber identitas dan kemudian memilih **Hapus sumber identitas**. Ketik `delete` kotak teks dan kemudian pilih **Hapus sumber identitas** untuk mengonfirmasi penghapusan sumber identitas.

------
#### [ AWS CLI ]

**Untuk memperbarui sumber identitas OIDC**  
Anda dapat memperbarui sumber identitas dengan menggunakan [UpdateIdentitySource](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_UpdateIdentitySource.html)operasi. Contoh berikut memperbarui sumber identitas yang ditentukan untuk menggunakan penyedia OIDC yang berbeda.

1. Buat `config.txt` file yang berisi rincian berikut dari IDP OIDC untuk digunakan oleh `--configuration` parameter perintah. `update-identity-source`

   ```
   {
       "openIdConnectConfiguration": {
           "issuer": "https://auth2.example.com",
           "tokenSelection": {
                   "identityTokenOnly": {
                           "clientIds":["2example10111213"],
                           "principalIdClaim": "sub"
                   },
           },
           "entityIdPrefix": "MyOIDCProvider",
           "groupConfiguration": {
                 "groupClaim": "groups",
                 "groupEntityType": "MyCorp::UserGroup"
           }
       }
   }
   ```

1. Jalankan perintah berikut untuk memperbarui sumber identitas OIDC.

   ```
   $ aws verifiedpermissions update-identity-source \
       --update-configuration file://config.txt \
       --policy-store-id 123456789012
   {
       "createdDate": "2023-05-19T20:30:28.214829+00:00",
       "identitySourceId": "ISEXAMPLEabcdefg111111",
       "lastUpdatedDate": "2023-05-19T20:30:28.214829+00:00",
       "policyStoreId": "PSEXAMPLEabcdefg111111"
   }
   ```

**catatan**  
Jika Anda mengubah tipe utama untuk sumber identitas, Anda harus memperbarui skema Anda untuk mencerminkan tipe utama yang diperbarui dengan benar.

------

# Memetakan token OIDC ke skema
<a name="oidc-map-token-to-schema"></a>

Anda mungkin menemukan bahwa Anda ingin menambahkan sumber identitas ke toko kebijakan dan klaim penyedia peta, atau token, ke skema toko kebijakan Anda. Anda dapat mengotomatiskan proses ini, dengan menggunakan [Pengaturan terpandu](policy-stores-create.md) untuk membuat penyimpanan kebijakan Anda dengan sumber identitas, atau memperbarui skema Anda secara manual setelah penyimpanan kebijakan dibuat. Setelah Anda memetakan token ke skema, Anda dapat membuat kebijakan yang mereferensikannya.

Bagian panduan pengguna ini memiliki informasi berikut:
+ Bila Anda dapat secara otomatis mengisi atribut ke skema penyimpanan kebijakan
+ Cara membuat skema untuk sumber identitas secara manual

Penyimpanan [kebijakan terkait API dan penyimpanan](policy-stores-api-userpool.md) kebijakan dengan sumber identitas yang dibuat melalui [penyiapan Terpandu](policy-stores-create.md) tidak memerlukan pemetaan manual atribut token identitas (ID) ke skema. Anda dapat memberikan Izin Terverifikasi dengan atribut di kumpulan pengguna dan membuat skema yang diisi dengan atribut pengguna. Dalam otorisasi token ID, Izin Terverifikasi memetakan klaim ke atribut entitas utama.

Untuk menggunakan penyedia identitas OIDC (iDP) sebagai sumber identitas di toko kebijakan Izin Terverifikasi, Anda harus memiliki atribut penyedia dalam skema Anda. Skema diperbaiki dan harus sesuai dengan entitas yang dibuat oleh token penyedia [IsAuthorizedWithToken](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_IsAuthorizedWithToken.html)atau permintaan [BatchIsAuthorizedWithToken](https://docs.aws.amazon.com/verifiedpermissions/latest/apireference/API_BatchIsAuthorizedWithToken.html)API. Jika Anda membuat toko kebijakan dengan cara yang secara otomatis mengisi skema Anda dari informasi penyedia dalam token ID, Anda siap untuk menulis kebijakan. Jika Anda membuat penyimpanan kebijakan tanpa skema untuk sumber identitas, Anda harus menambahkan atribut penyedia ke skema yang cocok dengan entitas yang dibuat menggunakan permintaan API. Kemudian Anda dapat menulis kebijakan menggunakan atribut dari token penyedia.

**Topics**
+ [Memetakan token ID ke skema](#oidc-map-id-token)
+ [Memetakan token akses](#oidc-map-access-token)
+ [Hal-hal yang perlu diketahui tentang pemetaan skema](#oidc-map-token-to-schema-things-to-know)

## Memetakan token ID ke skema
<a name="oidc-map-id-token"></a>

Izin Terverifikasi memproses klaim token ID sebagai atribut pengguna: nama dan judul mereka, keanggotaan grup mereka, informasi kontak mereka. Token ID paling berguna dalam model *otorisasi kontrol akses berbasis atribut* (ABAC). Jika Anda ingin Izin Terverifikasi menganalisis akses ke sumber daya berdasarkan siapa yang membuat permintaan, pilih token ID untuk sumber identitas Anda.

Bekerja dengan token ID dari penyedia OIDC hampir sama dengan bekerja dengan token Amazon Cognito ID. Perbedaannya ada pada klaim. IDP Anda mungkin menampilkan [atribut OIDC standar](https://openid.net/specs/openid-connect-core-1_0.html#StandardClaims), atau memiliki skema khusus. Saat membuat penyimpanan kebijakan baru di konsol Izin Terverifikasi, Anda dapat menambahkan sumber identitas OIDC dengan token ID contoh, atau Anda dapat memetakan klaim token secara manual ke atribut pengguna. Karena Izin Terverifikasi tidak mengetahui skema atribut IDP Anda, Anda harus memberikan informasi ini.

Untuk informasi selengkapnya, lihat [Membuat toko kebijakan Izin Terverifikasi](policy-stores-create.md).

Berikut ini adalah contoh skema untuk toko kebijakan dengan sumber identitas OIDC.

```
"User": {
   "shape": {
      "type": "Record",
      "attributes": {
         "email": {
            "type": "String"
         },
         "email_verified": {
            "type": "Boolean"
         },
         "name": {
            "type": "String",
            "required": true
         },
         "phone_number": {
            "type": "String"
         },
         "phone_number_verified": {
            "type": "Boolean"
         }
      }
   }
}
```

Untuk contoh kebijakan yang akan memvalidasi skema ini, lihat. [Mencerminkan atribut token ID OIDC](policies-examples.md#policies-examples-oidc-id)

## Memetakan token akses
<a name="oidc-map-access-token"></a>

*Izin Terverifikasi memproses klaim token akses selain klaim grup sebagai atribut tindakan, atau atribut konteks.* Seiring dengan keanggotaan grup, token akses dari IDP Anda mungkin berisi informasi tentang akses API. Token akses berguna dalam model otorisasi yang menggunakan kontrol akses berbasis peran (RBAC). Model otorisasi yang mengandalkan klaim token akses selain keanggotaan grup memerlukan upaya tambahan dalam konfigurasi skema.

Sebagian besar token akses dari penyedia OIDC eksternal sejajar erat dengan Amazon Cognito token akses. Token akses OIDC dipetakan ke objek konteks saat diteruskan ke Izin Terverifikasi. Atribut token akses dapat direferensikan menggunakan`context.token.attribute_name`. Contoh token akses OIDC berikut mencakup contoh klaim dasar.

```
{
    "sub": "91eb4550-9091-708c-a7a6-9758ef8b6b1e",
    "groups": [
        "Store-Owner-Role",
        "Customer"
    ],
    "iss": "https://auth.example.com",
    "client_id": "1example23456789",
    "aud": "https://myapplication.example.com"
    "scope": "MyAPI-Read",
    "exp": 1688096566,
    "iat": 1688092966,
    "jti": "a1b2c3d4-e5f6-a1b2-c3d4-TOKEN2222222",
    "username": "alice"
}
```

Contoh berikut menunjukkan cara mencerminkan atribut dari token akses contoh dalam skema Izin Terverifikasi Anda. Untuk informasi selengkapnya tentang mengedit skema Anda, lihat[Mengedit skema toko kebijakan](schema-edit.md).

```
{
   "MyApplication": {
      "actions": {
         "Read": {
            "appliesTo": {
               "context": {
                  "type": "ReusedContext"
               },
               "resourceTypes": [
                  "Application"
               ],
               "principalTypes": [
                  "User"
               ]
            }
         }
      },
      ...
      ...
      "commonTypes": {
         "ReusedContext": {
            "attributes": {
               "token": {
                  "type": "Record",
                  "attributes": {
                     "scope": {
                        "type": "Set",
                        "element": {
                           "type": "String"
                        }
                     },
                     "client_id": {
                        "type": "String"
                     }
                  }
               }
            },
            "type": "Record"
         }
      }
   }
}
```

Untuk contoh kebijakan yang akan memvalidasi skema ini, lihat. [Mencerminkan atribut token akses OIDC](policies-examples.md#policies-examples-oidc-access)

## Hal-hal yang perlu diketahui tentang pemetaan skema
<a name="oidc-map-token-to-schema-things-to-know"></a>

**Pemetaan atribut berbeda antara jenis token**  
[Dalam otorisasi token akses, Izin Terverifikasi memetakan klaim ke konteks.](context.md) Dalam otorisasi token ID, Izin Terverifikasi memetakan klaim ke atribut utama. Untuk penyimpanan kebijakan yang Anda buat di konsol Izin Terverifikasi, hanya penyimpanan kebijakan **kosong** dan **sampel** yang tidak memiliki sumber identitas dan mengharuskan Anda mengisi skema Anda dengan atribut kumpulan pengguna untuk otorisasi token ID. Otorisasi token akses didasarkan pada kontrol akses berbasis peran (RBAC) dengan klaim keanggotaan grup dan tidak secara otomatis memetakan klaim lain ke skema penyimpanan kebijakan.

**Atribut sumber identitas tidak diperlukan**  
Saat Anda membuat sumber identitas di konsol Izin Terverifikasi, tidak ada atribut yang ditandai sebagai wajib. Ini mencegah klaim yang hilang menyebabkan kesalahan validasi dalam permintaan otorisasi. Anda dapat mengatur atribut ke required sesuai kebutuhan, tetapi atribut tersebut harus ada di semua permintaan otorisasi.

**RBAC tidak memerlukan atribut dalam skema**  
Skema untuk sumber identitas bergantung pada asosiasi entitas yang Anda buat saat menambahkan sumber identitas. Sumber identitas memetakan satu klaim ke jenis entitas pengguna, dan satu klaim ke jenis entitas grup. Pemetaan entitas ini adalah inti dari konfigurasi sumber identitas. Dengan informasi minimum ini, Anda dapat menulis kebijakan yang melakukan tindakan otorisasi untuk pengguna tertentu dan grup tertentu yang mungkin menjadi anggota pengguna, dalam model kontrol akses berbasis peran (RBAC). Penambahan klaim token ke skema memperluas cakupan otorisasi toko kebijakan Anda. Atribut pengguna dari token ID memiliki informasi tentang pengguna yang dapat berkontribusi pada otorisasi kontrol akses berbasis atribut (ABAC). Atribut konteks dari token akses memiliki informasi seperti cakupan OAuth 2.0 yang dapat menyumbangkan informasi kontrol akses tambahan dari penyedia Anda, tetapi memerlukan modifikasi skema tambahan.

Opsi **Pengaturan dengan API Gateway dan penyedia identitas serta** **Penyiapan terpandu** di konsol Izin Terverifikasi menetapkan klaim token ID ke skema. Ini tidak berlaku untuk klaim token akses. [Untuk menambahkan klaim token akses non-grup ke skema Anda, Anda harus mengedit skema Anda dalam mode JSON dan menambahkan atribut CommonTypes.](https://docs.cedarpolicy.com/schema/json-schema.html#schema-commonTypes) Untuk informasi selengkapnya, lihat [Memetakan token akses](#oidc-map-access-token).

**Klaim grup OIDC mendukung berbagai format**  
Saat menambahkan penyedia OIDC, Anda dapat memilih nama klaim grup di ID atau token akses yang ingin dipetakan ke keanggotaan grup pengguna di toko kebijakan Anda. Izin terverifikasi mengenali klaim grup dalam format berikut:

1. String tanpa spasi: `"groups": "MyGroup"`

1. Daftar yang dibatasi ruang:. `"groups": "MyGroup1 MyGroup2 MyGroup3"` Setiap string adalah grup.

1. Daftar JSON (dibatasi koma): `"groups": ["MyGroup1", "MyGroup2", "MyGroup3"]`

**catatan**  
Izin Terverifikasi menafsirkan setiap string dalam klaim grup yang dipisahkan spasi sebagai grup terpisah. Untuk menafsirkan nama grup dengan karakter spasi sebagai grup tunggal, ganti atau hapus spasi dalam klaim. Misalnya, format grup bernama `My Group` sebagai`MyGroup`.

**Pilih jenis token**  
Cara penyimpanan kebijakan Anda bekerja dengan sumber identitas Anda bergantung pada keputusan kunci dalam konfigurasi sumber identitas: apakah Anda akan memproses ID atau token akses. Dengan penyedia OIDC, Anda harus memilih jenis token saat menambahkan sumber identitas. Anda dapat memilih ID atau token akses, dan pilihan Anda mengecualikan jenis token yang tidak dipilih untuk diproses di toko kebijakan Anda. Terutama jika Anda ingin mendapatkan keuntungan dari pemetaan otomatis klaim token ID ke atribut di konsol Izin Terverifikasi, putuskan lebih awal tentang jenis token yang ingin Anda proses sebelum Anda membuat sumber identitas Anda. Mengubah jenis token membutuhkan upaya yang signifikan untuk memfaktorkan ulang kebijakan dan skema Anda. Topik berikut menjelaskan penggunaan ID dan token akses dengan toko kebijakan.

**Parser cedar membutuhkan tanda kurung untuk beberapa karakter**  
Kebijakan biasanya referensi atribut skema dalam format seperti`principal.username`. Dalam kasus sebagian besar karakter non-alfanumerik seperti`:`,`.`, atau `/` yang mungkin muncul di nama klaim token, Izin Terverifikasi tidak dapat mengurai nilai kondisi seperti atau. `principal.cognito:username` `context.ip-address` Anda harus memformat kondisi ini dengan notasi braket dalam format `principal["cognito:username"]` atau`context["ip-address"]`, masing-masing. Karakter garis bawah `_` adalah karakter yang valid dalam nama klaim, dan satu-satunya pengecualian non-alfanumerik untuk persyaratan ini.

Contoh sebagian skema untuk atribut utama dari jenis ini terlihat seperti berikut:

```
"User": {
   "shape": {
      "type": "Record",
      "attributes": {
         "cognito:username": {
            "type": "String",
            "required": true
         },
         "custom:employmentStoreCode": {
            "type": "String",
            "required": true,
         },
         "email": {
            "type": "String",
            "required": false
         }
      }
   }
}
```

Contoh sebagian skema untuk atribut konteks jenis ini terlihat seperti berikut:

```
"GetOrder": {
   "memberOf": [],
   "appliesTo": {
      "resourceTypes": [
         "Order"
      ],
      "context": {
         "type": "Record",
         "attributes": {
            "ip-address": {
               "required": false,
               "type": "String"
            }
		 }
	  },
      "principalTypes": [
         "User"
      ]
   }
}
```

Untuk contoh kebijakan yang akan memvalidasi skema ini, lihat. [Menggunakan notasi braket untuk referensi atribut token](policies-examples.md#policies-examples-brackets)

# Validasi klien dan audiens untuk penyedia OIDC
<a name="oidc-validation"></a>

Saat Anda menambahkan sumber identitas ke penyimpanan kebijakan, Izin Terverifikasi memiliki opsi konfigurasi yang memverifikasi bahwa ID dan token akses digunakan sebagaimana dimaksud. Validasi ini terjadi dalam pemrosesan permintaan `IsAuthorizedWithToken` dan `BatchIsAuthorizedWithToken` API. Perilaku berbeda antara ID dan token akses, dan antara Amazon Cognito dan sumber identitas OIDC. Dengan penyedia kumpulan pengguna Amazon Cognito, Izin Terverifikasi dapat memvalidasi ID klien di ID dan token akses. Dengan penyedia OIDC, Izin Terverifikasi dapat memvalidasi ID klien dalam token ID, dan audiens dalam token akses.

*ID klien* adalah pengidentifikasi yang terkait dengan instance penyedia identitas yang digunakan aplikasi Anda, misalnya`1example23456789`. *Audiens* adalah jalur URL yang terkait dengan *pihak yang mengandalkan*, atau tujuan, dari token akses, misalnya`https://mytoken.example.com`. Saat menggunakan token akses, `aud` klaim selalu dikaitkan dengan audiens.

Token ID OIDC memiliki `aud` klaim yang berisi klien IDs, seperti. `1example23456789`

Token Akses OIDC memiliki `aud` klaim yang berisi URL pemirsa untuk token, seperti`https://myapplication.example.com`, dan `client_id` klaim yang berisi klien IDs, seperti. `1example23456789`

Saat menyiapkan penyimpanan kebijakan, masukkan satu atau beberapa nilai untuk **validasi Audiens** yang digunakan oleh kebijakan Anda untuk memvalidasi pemirsa token.
+ **Token ID** — Izin Terverifikasi memvalidasi ID klien dengan memeriksa bahwa setidaknya satu anggota klien IDs dalam `aud` klaim cocok dengan nilai validasi audiens.
+ **Token akses** — Izin Terverifikasi memvalidasi audiens dengan memeriksa apakah URL dalam `aud` klaim cocok dengan nilai validasi audiens. Jika tidak ada `aud` klaim, audiens dapat divalidasi menggunakan `client_id` klaim `cid` atau. Periksa dengan penyedia identitas Anda untuk klaim dan format audiens yang benar.

## Otorisasi sisi klien untuk JWTs
<a name="oidc-validation-other-idp"></a>

Anda mungkin ingin memproses token web JSON di aplikasi Anda dan meneruskan klaimnya ke Izin Terverifikasi tanpa menggunakan sumber identitas toko kebijakan. Anda dapat mengekstrak atribut entitas Anda dari JSON Web Token (JWT) dan menguraikannya menjadi Izin Terverifikasi.

Contoh ini menunjukkan bagaimana Anda dapat memanggil Izin Terverifikasi dari aplikasi menggunakan JWT.¹

```
async function authorizeUsingJwtToken(jwtToken) {
  
    const payload = await verifier.verify(jwtToken);
   
    let principalEntity = {
        entityType: "PhotoFlash::User", // the application needs to fill in the relevant user type
        entityId: payload["sub"], // the application need to use the claim that represents the user-id
    };
    let resourceEntity = {
        entityType: "PhotoFlash::Photo", //the application needs to fill in the relevant resource type
        entityId: "jane_photo_123.jpg", // the application needs to fill in the relevant resource id
    };
    let action = {
        actionType: "PhotoFlash::Action", //the application needs to fill in the relevant action id
        actionId: "GetPhoto", //the application needs to fill in the relevant action type
    };
    let entities = {
        entityList: [],
    };
    entities.entityList.push(...getUserEntitiesFromToken(payload));
    let policyStoreId = "PSEXAMPLEabcdefg111111"; // set your own policy store id
    
    const authResult = await client
        .isAuthorized({
        policyStoreId: policyStoreId,
        principal: principalEntity,
        resource: resourceEntity,
        action: action,
        entities,
        })
        .promise();
        
    return authResult; 
  
}

function getUserEntitiesFromToken(payload) {
  let attributes = {};
  let claimsNotPassedInEntities = ['aud', 'sub', 'exp', 'jti', 'iss'];
  Object.entries(payload).forEach(([key, value]) => {
    if (claimsNotPassedInEntities.includes(key)) {
        return;
    }
    if (Array.isArray(value)) {
      var attibuteItem = [];
      value.forEach((item) => {
        attibuteItem.push({
          string: item,
        });
      });
      attributes[key] = {
        set: attibuteItem,
      };
    } else if (typeof value === 'string') {
      attributes[key] = {
        string: value,
      } 
    } else if (typeof value === 'bigint' || typeof value ==='number') {
        attributes[key] = {
            long: value,
          } 
    } else if (typeof value === 'boolean') {
        attributes[key] = {
            boolean: value,
       } 
    }

  });

  let entityItem = {
    attributes: attributes,
    identifier: {
      entityType: "PhotoFlash::User",
      entityId: payload["sub"], // the application needs to use the claim that represents the user-id
    }
  };
  return [entityItem];
}
```

¹ Contoh kode ini menggunakan [aws-jwt-verify](https://github.com/awslabs/aws-jwt-verify)pustaka untuk memverifikasi JWTs ditandatangani oleh IdPs OIDC-kompatibel.