

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

# Kolam-kolam identitas Amazon Cognito
<a name="cognito-identity"></a>

Kumpulan identitas Amazon Cognito adalah direktori identitas federasi yang dapat Anda tukarkan dengan kredensialnya. AWS Kumpulan identitas menghasilkan AWS kredensil sementara untuk pengguna aplikasi Anda, apakah mereka telah masuk atau Anda belum mengidentifikasinya. Dengan peran dan kebijakan AWS Identity and Access Management (IAM), Anda dapat memilih tingkat izin yang ingin Anda berikan kepada pengguna Anda. Pengguna dapat memulai sebagai tamu dan mengambil aset yang Anda simpan. Layanan AWS Kemudian mereka dapat masuk dengan penyedia identitas pihak ketiga untuk membuka akses ke aset yang Anda sediakan untuk anggota terdaftar. Penyedia identitas pihak ketiga dapat berupa penyedia konsumen (sosial) OAuth 2.0 seperti Apple atau Google, penyedia identitas SAM atau OIDC kustom, atau skema otentikasi khusus, juga disebut *penyedia pengembang*, dari desain Anda sendiri.Fitur kumpulan identitas Amazon Cognito

**Menandatangani permintaan untuk Layanan AWS**  
[Tanda tangani permintaan API](https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-authenticating-requests.html) untuk Layanan AWS menyukai Amazon Simple Storage Service (Amazon S3) dan Amazon DynamoDB. Analisis aktivitas pengguna dengan layanan seperti Amazon Pinpoint dan Amazon. CloudWatch

**Filter permintaan dengan kebijakan berbasis sumber daya**  
Lakukan kontrol granular atas akses pengguna ke sumber daya Anda. Ubah klaim pengguna menjadi [tag sesi IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html), dan buat kebijakan IAM yang memberikan akses sumber daya ke subset pengguna Anda yang berbeda.

**Tetapkan akses tamu**  
Untuk pengguna yang belum masuk, konfigurasikan kumpulan identitas Anda untuk menghasilkan AWS kredensil dengan cakupan akses yang sempit. Mengautentikasi pengguna melalui penyedia masuk tunggal untuk meningkatkan akses mereka.

**Tetapkan peran IAM berdasarkan karakteristik pengguna**  
Tetapkan peran IAM tunggal ke semua pengguna yang diautentikasi, atau pilih peran berdasarkan klaim setiap pengguna.

**Terima berbagai penyedia identitas**  
Tukarkan ID atau token akses, token kumpulan pengguna, pernyataan SAFL, atau token penyedia sosial OAuth untuk kredensil. AWS 

**Validasi identitas Anda sendiri**  
Lakukan validasi pengguna Anda sendiri dan gunakan kredensi pengembang Anda untuk mengeluarkan AWS kredensi bagi pengguna Anda.

Anda mungkin sudah memiliki kumpulan pengguna Amazon Cognito yang menyediakan layanan autentikasi dan otorisasi ke aplikasi Anda. Anda dapat mengatur kumpulan pengguna sebagai penyedia identitas (iDP) ke kumpulan identitas Anda. Ketika Anda melakukannya, pengguna Anda dapat mengautentikasi melalui kumpulan pengguna Anda IdPs, mengkonsolidasikan klaim mereka ke dalam token identitas OIDC umum, dan menukar token tersebut dengan kredensil. AWS Pengguna Anda kemudian dapat menunjukkan kredensialnya dalam permintaan yang ditandatangani kepada Anda. Layanan AWS

Anda juga dapat mengajukan klaim yang diautentikasi dari salah satu penyedia identitas Anda langsung ke kumpulan identitas Anda. Amazon Cognito menyesuaikan klaim pengguna dari penyedia SAFL, OAuth, dan OIDC menjadi permintaan API untuk kredensi [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)jangka pendek.

Kumpulan pengguna Amazon Cognito seperti penyedia identitas OIDC ke aplikasi berkemampuan SSO Anda. Kumpulan identitas bertindak sebagai penyedia *AWS*identitas untuk aplikasi apa pun dengan dependensi sumber daya yang paling sesuai dengan otorisasi IAM.

Kolam identitas Amazon Cognito mendukung penyedia identitas berikut:
+ Penyedia publik:[Menyiapkan Login with Amazon sebagai kumpulan identitas IDP](amazon.md),[Menyiapkan Facebook sebagai kumpulan identitas IDP](facebook.md),[Menyiapkan Google sebagai kumpulan identitas iDP](google.md),[Menyiapkan Masuk dengan Apple sebagai kumpulan identitas iDP](apple.md), Twitter.
+ [Kumpulan pengguna Amazon Cognito](cognito-user-pools.md)
+ [Menyiapkan penyedia OIDC sebagai idP kumpulan identitas](open-id.md)
+ [Menyiapkan penyedia SAMP sebagai idP kumpulan identitas](saml-identity-provider.md)
+ [Identitas yang diautentikasi pengembang](developer-authenticated-identities.md)

Untuk informasi tentang ketersediaan Wilayah kolam identitas Amazon Cognito, lihat [AWS Ketersediaan Wilayah Layanan](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/).

Untuk informasi selengkapnya tentang kolam identitas Amazon Cognito, lihat topik-topik berikut.

**Topics**
+ [Ikhtisar konsol kolam identitas](identity-pools.md)
+ [Aliran otentikasi kumpulan identitas](authentication-flow.md)
+ [Peran IAM](iam-roles.md)
+ [Praktik terbaik keamanan untuk kumpulan identitas Amazon Cognito](identity-pools-security-best-practices.md)
+ [Menggunakan atribut untuk kontrol akses](attributes-for-access-control.md)
+ [Menggunakan kontrol akses berbasis peran](role-based-access-control.md)
+ [Mendapatkan kredensil](getting-credentials.md)
+ [Mengakses Layanan AWS dengan kredensi sementara](accessing-aws-services.md)
+ [Identity pool penyedia identitas pihak ketiga](external-identity-providers.md)
+ [Identitas yang diautentikasi pengembang](developer-authenticated-identities.md)
+ [Mengalihkan pengguna yang tidak diautentikasi ke pengguna yang diautentikasi](switching-identities.md)

# Ikhtisar konsol kolam identitas
<a name="identity-pools"></a>

Kumpulan identitas Amazon Cognito menyediakan AWS kredensi sementara untuk pengguna yang merupakan tamu (tidak diautentikasi) dan untuk pengguna yang telah diautentikasi dan menerima token. Identity pool adalah penyimpan pengenal pengguna yang ditautkan ke penyedia identitas eksternal Anda.

Salah satu cara untuk memahami fitur dan opsi kumpulan identitas adalah dengan membuatnya di konsol Amazon Cognito. Anda dapat menjelajahi efek pengaturan yang berbeda pada alur autentikasi, kontrol akses berbasis peran dan atribut, serta akses tamu. Dari sana, Anda dapat melanjutkan ke bab-babnya selanjutnya dalam panduan ini dan menambahkan komponen yang sesuai ke aplikasi Anda sehingga Anda dapat menerapkan otentikasi kumpulan identitas.

**Topics**
+ [Buat kumpulan identitas](#identity-pools-create)
+ [Peran IAM pengguna](#user-iam-roles)
+ [Identitas yang diautentikasi dan tidak diautentikasi](#authenticated-and-unauthenticated-identities)
+ [Aktifkan atau nonaktifkan akses tamu](#enable-or-disable-unauthenticated-identities)
+ [Mengubah peran yang terkait dengan jenis identitas](#change-the-role-associated-with-an-identity-type)
+ [Edit penyedia identitas](#enable-or-edit-authentication-providers)
+ [Menghapus kumpulan identitas](#delete-an-identity-pool)
+ [Menghapus identitas dari kumpulan identitas](#delete-an-identity-from-an-identity-pool)
+ [Menggunakan Amazon Cognito Sync dengan kumpulan identitas](#identity-pools-sync)

## Buat kumpulan identitas
<a name="identity-pools-create"></a>

**Untuk membuat kolam identitas baru di konsol**

1. Masuk ke [konsol Amazon Cognito](https://console.aws.amazon.com/cognito/home) dan pilih **Identity** pool.

1. Pilih **Buat kumpulan identitas**.

1. Di **Konfigurasi kepercayaan kumpulan identitas**, pilih untuk menyiapkan kumpulan identitas Anda untuk akses **Terautentikasi, akses** **Tamu**, atau keduanya.

   1. Jika Anda memilih **Akses yang diautentikasi**, pilih satu atau beberapa **jenis Identitas** yang ingin Anda tetapkan sebagai sumber identitas yang diautentikasi di kumpulan identitas Anda. Jika mengonfigurasi **penyedia pengembang Kustom**, Anda tidak dapat memodifikasi atau menghapusnya setelah membuat kumpulan identitas.

1. Di **Konfigurasi izin**, pilih peran IAM default untuk pengguna yang diautentikasi atau tamu di kumpulan identitas Anda.

   1. Pilih untuk **Membuat peran IAM baru** jika Anda ingin Amazon Cognito membuat peran baru untuk Anda dengan izin dasar dan hubungan kepercayaan dengan kumpulan identitas Anda. Masukkan **nama peran IAM** untuk mengidentifikasi peran baru Anda, misalnya`myidentitypool_authenticatedrole`. Pilih **Lihat dokumen kebijakan** untuk meninjau izin yang akan ditetapkan Amazon Cognito ke peran IAM baru Anda.

   1. Anda dapat memilih untuk **Menggunakan peran IAM yang ada** jika Anda sudah memiliki peran dalam peran Akun AWS yang ingin Anda gunakan. Anda harus mengonfigurasi kebijakan kepercayaan peran IAM Anda untuk disertakan`cognito-identity.amazonaws.com`. Konfigurasikan kebijakan kepercayaan peran Anda agar hanya mengizinkan Amazon Cognito mengambil peran saat menampilkan bukti bahwa permintaan tersebut berasal dari pengguna yang diautentikasi di kumpulan identitas spesifik Anda. Untuk informasi selengkapnya, lihat [Kepercayaan peran dan izin](iam-roles.md#role-trust-and-permissions).

1. Di **Connect identity providers**, masukkan detail penyedia identitas (IdPs) yang Anda pilih di **Configure identity pool trust**. Anda mungkin diminta untuk memberikan informasi klien OAuth aplikasi, memilih kumpulan pengguna Amazon Cognito, memilih IDP IAM, atau memasukkan pengenal khusus untuk penyedia pengembang.

   1. Pilih **pengaturan Peran** untuk setiap IDP. Anda dapat menetapkan pengguna dari IDP tersebut peran **Default** yang Anda atur saat mengonfigurasi peran **Terautentikasi, atau Anda** **dapat Memilih** peran dengan aturan. Dengan IdP kumpulan pengguna Amazon Cognito, Anda juga dapat **Memilih peran dengan preferred\$1role dalam token**. Untuk informasi lebih lanjut tentang `cognito:preferred_role` klaim, lihat[Menetapkan nilai prioritas ke grup](cognito-user-pools-user-groups.md#assigning-precedence-values-to-groups).

      1. Jika Anda memilih **Pilih peran dengan aturan**, masukkan **Klaim** sumber dari autentikasi pengguna Anda, **Operator** yang ingin Anda bandingkan dengan klaim, **Nilai** yang akan menyebabkan kecocokan dengan pilihan peran ini, dan **Peran** yang ingin Anda tetapkan saat **penetapan Peran** cocok. Pilih **Tambahkan yang lain** untuk membuat aturan tambahan berdasarkan kondisi yang berbeda.

      1. Pilih **Resolusi Peran**. **Jika klaim pengguna tidak sesuai dengan aturan, Anda dapat menolak kredensional atau mengeluarkan kredensi untuk peran Terautentikasi Anda.**

   1. Konfigurasikan **Atribut untuk kontrol akses** untuk setiap IDP. Atribut untuk kontrol akses memetakan klaim pengguna ke [tag utama](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_iam-tags.html) yang diterapkan Amazon Cognito untuk sesi sementara mereka. Anda dapat membuat kebijakan IAM untuk memfilter akses pengguna berdasarkan tag yang Anda terapkan pada sesi mereka.

      1. Untuk tidak menerapkan tag utama, pilih **Tidak aktif**.

      1. Untuk menerapkan tag utama berdasarkan `sub` dan `aud` klaim, pilih **Gunakan pemetaan default**.

      1. Untuk membuat skema atribut kustom Anda sendiri ke tag utama, pilih **Gunakan pemetaan khusus**. Kemudian masukkan **kunci Tag** yang ingin Anda sumber dari setiap **Klaim** yang ingin Anda wakili dalam tag.

1. Di **Konfigurasi properti**, masukkan **Nama di bawah nama** **kumpulan Identitas**.

1. Di bawah **Autentikasi dasar (klasik)**, pilih apakah Anda ingin **Aktifkan aliran dasar**. Dengan aliran dasar aktif, Anda dapat melewati pilihan peran yang dibuat untuk Anda IdPs dan menelepon [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)secara langsung. Untuk informasi selengkapnya, lihat [Aliran otentikasi kumpulan identitas](authentication-flow.md).

1. Di bawah **Tag**, pilih **Tambahkan tag** jika Anda ingin menerapkan [tag](https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html) ke kumpulan identitas Anda.

1. Di **Tinjau dan buat**, konfirmasikan pilihan yang Anda buat untuk kumpulan identitas baru Anda. Pilih **Edit** untuk kembali ke wizard dan mengubah pengaturan apa pun. Setelah selesai, pilih **Buat kumpulan identitas**.

## Peran IAM pengguna
<a name="user-iam-roles"></a>

Peran IAM menentukan izin bagi pengguna Anda untuk mengakses AWS sumber daya, seperti. [Amazon Cognito Sync](cognito-sync.md) Pengguna aplikasi Anda akan mengambil peran yang Anda buat. Anda dapat menentukan peran yang berbeda untuk pengguna yang terautentikasi dan tidak terautentikasi. Untuk mepelajari selengkapnya tentang IAM role, lihat [Peran IAM](iam-roles.md).

## Identitas yang diautentikasi dan tidak diautentikasi
<a name="authenticated-and-unauthenticated-identities"></a>

Kolam identitas Amazon Cognito mendukung identitas terautetikasi dan tidak terautentikasi. Identitas terautentikasi adalah milik pengguna yang diautentikasi oleh penyedia identitas yang didukung. Identitas yang tidak diautentikasi umumnya adalah milik pengguna tamu.
+ Untuk mengkonfigurasi identitas terautentikasi dengan penyedia login publik, lihat [Identity pool penyedia identitas pihak ketiga](external-identity-providers.md).
+ Untuk mengkonfigurasi proses autentikasi backend Anda sendiri, lihat [Identitas yang diautentikasi pengembang](developer-authenticated-identities.md).

## Aktifkan atau nonaktifkan akses tamu
<a name="enable-or-disable-unauthenticated-identities"></a>

 Identitas Amazon Cognito pool akses tamu (identitas yang tidak diautentikasi) menyediakan pengenal dan AWS kredensil unik untuk pengguna yang tidak mengautentikasi dengan penyedia identitas. Jika aplikasi Anda mengizinkan pengguna yang tidak masuk, Anda dapat mengaktifkan akses untuk identitas yang tidak diautentikasi. Untuk mempelajari selengkapnya, lihat [Memulai dengan kumpulan identitas Amazon Cognito](getting-started-with-identity-pools.md).

**Untuk memperbarui akses tamu di kolam identitas**

1. Pilih **kumpulan Identitas** dari konsol [Amazon Cognito](https://console.aws.amazon.com/cognito/home). Pilih kumpulan identitas.

1. Pilih tab **Akses pengguna**.

1. Temukan **akses Tamu**. Di kumpulan identitas yang saat ini tidak mendukung akses tamu, **Status** **Tidak Aktif**.

   1. Jika **akses Tamu** **Aktif** dan Anda ingin menonaktifkannya, pilih **Nonaktifkan**.

   1. Jika **akses Tamu** **Tidak Aktif** dan Anda ingin mengaktifkannya, pilih **Edit**.

      1. Pilih peran IAM default untuk pengguna tamu di kumpulan identitas Anda.

        1. Pilih untuk **Membuat peran IAM baru** jika Anda ingin Amazon Cognito membuat peran baru untuk Anda dengan izin dasar dan hubungan kepercayaan dengan kumpulan identitas Anda. Masukkan **nama peran IAM** untuk mengidentifikasi peran baru Anda, misalnya`myidentitypool_authenticatedrole`. Pilih **Lihat dokumen kebijakan** untuk meninjau izin yang akan ditetapkan Amazon Cognito ke peran IAM baru Anda.

        1. Anda dapat memilih untuk **Menggunakan peran IAM yang ada** jika Anda sudah memiliki peran dalam peran Akun AWS yang ingin Anda gunakan. Anda harus mengonfigurasi kebijakan kepercayaan peran IAM Anda untuk disertakan`cognito-identity.amazonaws.com`. Konfigurasikan kebijakan kepercayaan peran Anda agar hanya mengizinkan Amazon Cognito mengambil peran saat menampilkan bukti bahwa permintaan tersebut berasal dari pengguna yang diautentikasi di kumpulan identitas spesifik Anda. Untuk informasi selengkapnya, lihat [Kepercayaan peran dan izin](iam-roles.md#role-trust-and-permissions).

        1. Pilih **Simpan perubahan**.

        1. Untuk mengaktifkan akses tamu, pilih **Aktifkan** di tab **Akses pengguna**.

## Mengubah peran yang terkait dengan jenis identitas
<a name="change-the-role-associated-with-an-identity-type"></a>

Setiap identitas di kolam identitas Anda dikategorikan sebagai diautentikasi atau tidak diautentikasi. Identitas yang diautentikasi adalah milik pengguna yang diautentikasi oleh penyedia login publik (kolam pengguna Amazon Cognito, Login with Amazon, Login dengan Apple, Facebook, Google, SAML, atau Penyedia OpenID Connect apa pun) atau penyedia developer (proses autentikasi backend Anda sendiri). Identitas yang tidak diautentikasi umumnya adalah milik pengguna tamu.

Untuk setiap jenis identitas, terdapat peran yang ditetapkan. Peran ini memiliki kebijakan yang melekat padanya yang menentukan peran mana Layanan AWS yang dapat diakses. Saat Amazon Cognito menerima permintaan, layanan akan menentukan jenis identitas, menentukan peran yang ditetapkan ke jenis identitas tersebut, dan menggunakan kebijakan yang dilampirkan pada peran tersebut untuk merespons. Dengan memodifikasi kebijakan atau menetapkan peran yang berbeda ke tipe identitas, Anda dapat mengontrol tipe identitas mana Layanan AWS yang dapat diakses. Untuk melihat atau mengubah kebijakan yang terkait dengan peran dalam kolam identitas Anda, lihat [AWS Konsol IAM](https://console.aws.amazon.com/iam/home).

**Untuk mengubah kumpulan identitas peran default yang diautentikasi atau tidak diautentikasi**

1. Pilih **kumpulan Identitas** dari konsol [Amazon Cognito](https://console.aws.amazon.com/cognito/home). Pilih kumpulan identitas.

1. Pilih tab **Akses pengguna**.

1. Temukan **akses Tamu atau Akses** **Terautentikasi**. Dalam kumpulan identitas yang saat ini tidak dikonfigurasi untuk jenis akses tersebut, **Status** **Tidak Aktif**. Pilih **Edit**.

1. Pilih peran IAM default untuk tamu atau pengguna yang diautentikasi di kumpulan identitas Anda.

   1. Pilih untuk **Membuat peran IAM baru** jika Anda ingin Amazon Cognito membuat peran baru untuk Anda dengan izin dasar dan hubungan kepercayaan dengan kumpulan identitas Anda. Masukkan **nama peran IAM** untuk mengidentifikasi peran baru Anda, misalnya`myidentitypool_authenticatedrole`. Pilih **Lihat dokumen kebijakan** untuk meninjau izin yang akan ditetapkan Amazon Cognito ke peran IAM baru Anda.

   1. Anda dapat memilih untuk **Menggunakan peran IAM yang ada** jika Anda sudah memiliki peran dalam peran Akun AWS yang ingin Anda gunakan. Anda harus mengonfigurasi kebijakan kepercayaan peran IAM Anda untuk disertakan`cognito-identity.amazonaws.com`. Konfigurasikan kebijakan kepercayaan peran Anda agar hanya mengizinkan Amazon Cognito mengambil peran saat menampilkan bukti bahwa permintaan tersebut berasal dari pengguna yang diautentikasi di kumpulan identitas spesifik Anda. Untuk informasi selengkapnya, lihat [Kepercayaan peran dan izin](iam-roles.md#role-trust-and-permissions).

1. Pilih **Simpan perubahan**.

## Edit penyedia identitas
<a name="enable-or-edit-authentication-providers"></a>

Jika Anda mengizinkan pengguna untuk melakukan autentikasi menggunakan penyedia identitas konsumen (misalnya, kumpulan pengguna Amazon Cognito, Login with Amazon, Masuk dengan Apple, Facebook, atau Google), Anda dapat menentukan pengenal aplikasi di konsol kumpulan identitas Amazon Cognito (identitas federasi). Ini mengaitkan ID aplikasi (disediakan oleh penyedia login publik) dengan kolam identitas Anda.

Anda juga dapat mengonfigurasi aturan autentikasi untuk setiap penyedia dari halaman ini. Setiap penyedia memberikan izin hingga 25 aturan. Aturan diterapkan dalam urutan yang Anda simpan untuk setiap penyedia. Untuk informasi selengkapnya, lihat [Menggunakan kontrol akses berbasis peran](role-based-access-control.md).

**Awas**  
Mengubah ID aplikasi iDP yang ditautkan di kumpulan identitas Anda mencegah pengguna yang ada melakukan autentikasi dengan kumpulan identitas tersebut. Untuk informasi selengkapnya, lihat [Identity pool penyedia identitas pihak ketiga](external-identity-providers.md).

**Untuk memperbarui penyedia identitas pool identitas (iDP)**

1. Pilih **kumpulan Identitas** dari konsol [Amazon Cognito](https://console.aws.amazon.com/cognito/home). Pilih kumpulan identitas.

1. Pilih tab **Akses pengguna**.

1. Temukan **penyedia Identitas**. Pilih penyedia identitas yang ingin Anda edit. Jika Anda ingin menambahkan IDP baru, pilih **Tambahkan penyedia identitas**.

   1. Jika Anda memilih **Tambahkan penyedia identitas**, pilih salah satu **jenis Identitas** yang ingin Anda tambahkan.

1. Untuk mengubah ID aplikasi, pilih **Edit** dalam **informasi penyedia Identitas**.

1. ****Untuk mengubah peran yang diminta Amazon Cognito saat mengeluarkan kredensil kepada pengguna yang telah diautentikasi dengan penyedia ini, pilih Edit dalam pengaturan Peran.****

   1. Anda dapat menetapkan pengguna dari IDP tersebut peran **Default** yang Anda atur saat mengonfigurasi peran **Terautentikasi, atau Anda** **dapat Memilih** peran dengan aturan. Dengan IdP kumpulan pengguna Amazon Cognito, Anda juga dapat **Memilih peran dengan preferred\$1role dalam token**. Untuk informasi lebih lanjut tentang `cognito:preferred_role` klaim, lihat[Menetapkan nilai prioritas ke grup](cognito-user-pools-user-groups.md#assigning-precedence-values-to-groups).

     1. Jika Anda memilih **Pilih peran dengan aturan**, masukkan **Klaim** sumber dari autentikasi pengguna Anda, **Operator** yang ingin Anda bandingkan dengan klaim, **Nilai** yang akan menyebabkan kecocokan dengan pilihan peran ini, dan **Peran** yang ingin Anda tetapkan saat **penetapan Peran** cocok. Pilih **Tambahkan yang lain** untuk membuat aturan tambahan berdasarkan kondisi yang berbeda.

     1. Pilih **Resolusi Peran**. **Jika klaim pengguna tidak sesuai dengan aturan, Anda dapat menolak kredensional atau mengeluarkan kredensi untuk peran Terautentikasi Anda.**

1. **Untuk mengubah tag utama yang ditetapkan Amazon Cognito saat mengeluarkan kredensil kepada pengguna yang telah diautentikasi dengan penyedia ini, pilih **Edit** di Atribut untuk kontrol akses.**

   1. Untuk tidak menerapkan tag utama, pilih **Tidak aktif**.

   1. Untuk menerapkan tag utama berdasarkan `sub` dan `aud` klaim, pilih **Gunakan pemetaan default**.

   1. Untuk membuat skema atribut kustom Anda sendiri ke tag utama, pilih **Gunakan pemetaan khusus**. Kemudian masukkan **kunci Tag** yang ingin Anda sumber dari setiap **Klaim** yang ingin Anda wakili dalam tag.

1. Pilih **Simpan perubahan**.

## Menghapus kumpulan identitas
<a name="delete-an-identity-pool"></a>

Anda tidak dapat membatalkan penghapusan kumpulan identitas. Setelah Anda menghapus kumpulan identitas, semua aplikasi dan pengguna yang bergantung padanya berhenti berfungsi.

**Untuk menghapus kolam identitas**

1. Pilih **kumpulan Identitas** dari konsol [Amazon Cognito](https://console.aws.amazon.com/cognito/home). Pilih tombol radio di sebelah kumpulan identitas yang ingin Anda hapus.

1. Pilih **Hapus**.

1. Masukkan atau tempel nama kumpulan identitas Anda dan pilih **Hapus**.

**Awas**  
Ketika Anda memilih tombol Hapus, Anda akan menghapus kumpulan identitas Anda secara permanen dan semua data pengguna yang dikandungnya. Menghapus kumpulan identitas akan menyebabkan aplikasi dan layanan lain yang menggunakan kumpulan identitas berhenti bekerja.

## Menghapus identitas dari kumpulan identitas
<a name="delete-an-identity-from-an-identity-pool"></a>

Saat menghapus identitas dari kumpulan identitas, Anda menghapus informasi identifikasi yang disimpan Amazon Cognito untuk pengguna federasi tersebut. Ketika pengguna Anda meminta kredensi lagi, mereka menerima ID identitas baru jika kumpulan identitas Anda masih mempercayai penyedia identitas mereka. Anda tidak dapat membatalkan operasi ini.

**Untuk menghapus identitas**

1. Pilih **kumpulan Identitas** dari konsol [Amazon Cognito](https://console.aws.amazon.com/cognito/home). Pilih kumpulan identitas.

1. Pilih tab **Identity Browser**.

1. Pilih kotak centang di samping identitas yang ingin Anda hapus dan pilih **Hapus**. Konfirmasikan bahwa Anda ingin menghapus identitas dan pilih **Hapus**.

## Menggunakan Amazon Cognito Sync dengan kumpulan identitas
<a name="identity-pools-sync"></a>

 Amazon Cognito Sync adalah pustaka Layanan AWS dan klien yang memungkinkan untuk menyinkronkan data pengguna terkait aplikasi di seluruh perangkat. Amazon Cognito Sync dapat menyinkronkan data profil pengguna di seluruh perangkat seluler dan web tanpa menggunakan backend Anda sendiri. Pustaka klien menyimpan data secara lokal sehingga aplikasi Anda dapat membaca dan menulis data terlepas dari status konektivitas perangkat. Saat perangkat online, Anda dapat menyinkronkan data. Jika Anda mengatur sinkronisasi push, Anda dapat segera memberi tahu perangkat lain bahwa pembaruan tersedia. 

### Mengelola kumpulan data
<a name="managing-datasets-in-the-amazon-cognito-console"></a>

Jika Anda telah menerapkan fungsionalitas Amazon Cognito Sync di aplikasi Anda, konsol kumpulan identitas Amazon Cognito memungkinkan Anda membuat dan menghapus kumpulan data dan catatan untuk identitas individual secara manual. Perubahan apa pun yang Anda buat pada kumpulan data atau catatan identitas di konsol kumpulan identitas Amazon Cognito tidak akan disimpan hingga Anda **memilih** Sinkronisasi di konsol. Perubahan tidak terlihat oleh pengguna akhir hingga identitas memanggil **Sinkronisasi**. Data yang disinkronkan dari perangkat lain untuk identitas individual akan terlihat setelah Anda menyegarkan halaman kumpulan data daftar untuk identitas tertentu.

#### Membuat dataset untuk identitas
<a name="create-a-dataset-for-an-identity"></a>

Amazon Cognito Sync mengaitkan kumpulan data dengan satu identitas. Anda dapat mengisi kumpulan data Anda dengan mengidentifikasi informasi tentang pengguna yang diwakili oleh identitas, lalu menyinkronkan informasi tersebut ke semua perangkat pengguna Anda.

**Untuk menambahkan dataset dan catatan dataset ke identitas**

1. Pilih **kumpulan Identitas** dari konsol [Amazon Cognito](https://console.aws.amazon.com/cognito/home). Pilih kumpulan identitas.

1. Pilih tab **Identity Browser**.

1. Pilih identitas yang ingin Anda edit.

1. Di **Datasets**, pilih **Create** dataset.

1. Masukkan **nama Dataset** dan pilih **Buat kumpulan data**.

1. Jika Anda ingin menambahkan catatan ke kumpulan data Anda, pilih kumpulan data Anda dari detail identitas. Di **Rekaman**, pilih **Buat catatan**.

1. Masukkan **Kunci** dan **Nilai** untuk catatan Anda. Pilih **Konfirmasi**. Ulangi untuk menambahkan lebih banyak catatan.

#### Menghapus kumpulan data yang terkait dengan identitas
<a name="delete-a-dataset-associated-with-an-identity"></a>

**Untuk menghapus dataset dan catatannya dari identitas**

1. Pilih **kumpulan Identitas** dari konsol [Amazon Cognito](https://console.aws.amazon.com/cognito/home). Pilih kumpulan identitas.

1. Pilih tab **Identity Browser**.

1. Pilih identitas yang berisi kumpulan data yang ingin Anda hapus.

1. Di **Datasets**, pilih tombol radio di sebelah dataset yang ingin Anda hapus.

1. Pilih **Hapus**. Tinjau pilihan Anda dan pilih **Hapus** lagi.

### Publikasikan data massal
<a name="bulk-publish-data"></a>

 Publikasi massal dapat digunakan untuk mengekspor data yang sudah disimpan di toko Sinkronisasi Amazon Cognito Anda ke aliran Amazon Kinesis. Untuk memahami petunjuk tentang cara mempublikasikan semua pengaliran Anda secara massal, lihat [Menerapkan aliran Amazon Cognito Sync](cognito-streams.md). 

### Aktifkan sinkronisasi push
<a name="enable-push-synchronization"></a>

 Amazon Cognito secara otomatis melacak hubungan antara identitas dan perangkat. Dengan menggunakan fitur push sync, Anda dapat memastikan bahwa setiap instance dari identitas yang diberikan diberi tahu saat data identitas berubah. Sinkronisasi push membuatnya sehingga, setiap kali dataset berubah untuk identitas, semua perangkat yang terkait dengan identitas tersebut menerima pemberitahuan push senyap yang memberi tahu mereka tentang perubahan tersebut.

 Anda dapat mengaktifkan sinkronisasi push di konsol Amazon Cognito. 

**Untuk mengaktifkan sinkronisasi push**

1. Pilih **kumpulan Identitas** dari konsol [Amazon Cognito](https://console.aws.amazon.com/cognito/home). Pilih kumpulan identitas.

1. Pilih tab **Properti kolam Identity**.

1. **Di **sinkronisasi push**, pilih Edit**

1. Pilih **Aktifkan sinkronisasi push dengan kumpulan identitas Anda**.

1. Pilih salah satu aplikasi **Platform Amazon Simple Notification Service (Amazon SNS) Platform** yang Anda buat saat ini. Wilayah AWS Amazon Cognito menerbitkan pemberitahuan push ke aplikasi platform Anda. Pilih **Buat aplikasi platform** untuk menavigasi ke konsol Amazon SNS dan membuat yang baru.

1. Untuk mempublikasikan ke aplikasi platform Anda, Amazon Cognito mengasumsikan peran IAM dalam aplikasi Anda. Akun AWS Pilih untuk **Membuat peran IAM baru** jika Anda ingin Amazon Cognito membuat peran baru untuk Anda dengan izin dasar dan hubungan kepercayaan dengan kumpulan identitas Anda. Masukkan **nama peran IAM** untuk mengidentifikasi peran baru Anda, misalnya`myidentitypool_authenticatedrole`. Pilih **Lihat dokumen kebijakan** untuk meninjau izin yang akan ditetapkan Amazon Cognito ke peran IAM baru Anda.

1. Anda dapat memilih untuk **Menggunakan peran IAM yang ada** jika Anda sudah memiliki peran dalam peran Akun AWS yang ingin Anda gunakan. Anda harus mengonfigurasi kebijakan kepercayaan peran IAM Anda untuk disertakan`cognito-identity.amazonaws.com`. Konfigurasikan kebijakan kepercayaan peran Anda agar hanya mengizinkan Amazon Cognito mengambil peran saat menampilkan bukti bahwa permintaan tersebut berasal dari pengguna yang diautentikasi di kumpulan identitas spesifik Anda. Untuk informasi selengkapnya, lihat [Kepercayaan peran dan izin](iam-roles.md#role-trust-and-permissions).

1. Pilih **Simpan perubahan**.

### Siapkan Amazon Cognito Streams
<a name="set-up-cognito-streams"></a>

 Pengaliran Amazon Cognito memberikan developer kontrol dan wawasan terkait data mereka yang disimpan di Amazon Cognito Sync. Developer sekarang dapat mengkonfigurasi pengaliran Kinesis untuk menerima peristiwa sebagai data. Amazon Cognito dapat mendorong setiap perubahan set data ke pengaliran Kinesis yang Anda miliki secara langsung. Untuk mengetahui petunjuk tentang cara mengatur Pengaliran Amazon Cognito di konsol Amazon Cognito, lihat [Menerapkan aliran Amazon Cognito Sync](cognito-streams.md). 

### Siapkan Acara Amazon Cognito
<a name="set-up-cognito-events"></a>

 Acara Amazon Cognito memungkinkan Anda menjalankan AWS Lambda fungsi sebagai respons terhadap peristiwa penting di Amazon Cognito Sync. Amazon Cognito Sync memunculkan peristiwa Sync Trigger ketika set data disinkronkan. Anda dapat menggunakan peristiwa Sync Trigger untuk mengambil tindakan ketika pengguna memperbarui data. Untuk mengetahui instruksi tentang menyiapkan Peristiwa Amazon Cognito dari konsol, lihat [Menyesuaikan alur kerja dengan Amazon Cognito Events](cognito-events.md). 

 Untuk mempelajari lebih lanjut tentang AWS Lambda, lihat [AWS Lambda](https://aws.amazon.com/lambda/). 

# Aliran otentikasi kumpulan identitas
<a name="authentication-flow"></a>

Amazon Cognito membantu Anda membuat pengidentifikasi unik untuk pengguna akhir Anda yang tetap konsisten di seluruh perangkat dan platform. Amazon Cognito juga memberikan kredenal hak istimewa terbatas sementara ke aplikasi Anda untuk mengakses sumber daya. AWS Halaman ini membahas dasar-dasar cara kerja otentikasi di Amazon Cognito dan menjelaskan siklus hidup identitas di dalam kumpulan identitas Anda.

**Authflow penyedia eksternal**

Seorang pengguna yang mengautentikasi dengan Amazon Cognito melalui proses multi-langkah untuk mem-bootstrap kredensialnya. Amazon Cognito memiliki dua alur berbeda untuk autentikasi dengan penyedia publik: ditingkatkan dan dasar.

Setelah menyelesaikan salah satu alur ini, Anda dapat mengakses aliran lain Layanan AWS seperti yang ditentukan oleh kebijakan akses peran Anda. Secara default, [konsol Amazon Cognito](https://console.aws.amazon.com/cognito/) membuat peran dengan akses ke toko Amazon Cognito Sync dan ke Amazon Mobile Analytics. Untuk informasi selengkapnya tentang cara memberikan akses tambahan, lihat[Peran IAM](iam-roles.md).

Identity pool menerima artefak berikut dari penyedia:


| Penyedia | Artefak otentikasi | 
| --- | --- | 
| Kolam pengguna Amazon Cognito | Token ID | 
| OpenID Connect (OIDC) | Token ID | 
| SAML 2.0 | Pernyataan SAFL | 
| Penyedia sosial | Token akses | 

## Alur otentikasi yang disempurnakan (disederhanakan)
<a name="authentication-flow-enhanced"></a>

Saat Anda menggunakan authflow yang disempurnakan, aplikasi Anda terlebih dahulu menampilkan bukti autentikasi dari kumpulan pengguna Amazon Cognito resmi atau penyedia identitas pihak ketiga dalam permintaan. [GetId](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_GetId.html) 

1. [Aplikasi Anda menyajikan bukti otentikasi—token web JSON atau pernyataan SAML—dari kumpulan pengguna Amazon Cognito resmi atau penyedia identitas pihak ketiga dalam permintaan getID.](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_GetId.html)

1. Kumpulan identitas Anda mengembalikan ID identitas.

1. Aplikasi Anda menggabungkan ID identitas dengan bukti otentikasi yang sama dalam [GetCredentialsForIdentity](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_GetCredentialsForIdentity.html)permintaan.

1. Kumpulan identitas Anda mengembalikan AWS kredensialnya.

1. Aplikasi Anda menandatangani permintaan AWS API dengan kredensi sementara.

Otentikasi yang disempurnakan mengelola logika pemilihan peran IAM dan pengambilan kredensional dalam konfigurasi kumpulan identitas Anda. Anda dapat mengonfigurasi kumpulan identitas untuk memilih peran default, menerapkan prinsip kontrol akses berbasis atribut (ABAC) atau kontrol akses berbasis peran (RBAC) ke pemilihan peran. AWS Kredensi dari otentikasi yang disempurnakan berlaku selama satu jam.

**Urutan operasi dalam otentikasi yang disempurnakan**

1. `GetId`

1. `GetCredentialsForIdentity`

![\[Diagram yang menunjukkan aliran otentikasi yang disempurnakan\]](http://docs.aws.amazon.com/id_id/cognito/latest/developerguide/images/amazon-cognito-ext-auth-enhanced-flow.png)


## Alur otentikasi dasar (klasik)
<a name="authentication-flow-basic"></a>

Ketika Anda menerapkan alur otentikasi dasar, aplikasi Anda memilih peran IAM yang Anda ingin pengguna untuk mengambil alih.

1. [Aplikasi Anda menyajikan bukti otentikasi—token web JSON atau pernyataan SAML—dari kumpulan pengguna Amazon Cognito resmi atau penyedia identitas pihak ketiga dalam permintaan getID.](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_GetId.html)

1. Kumpulan identitas Anda mengembalikan ID identitas.

1. Aplikasi Anda menggabungkan ID identitas dengan bukti otentikasi yang sama dalam [GetOpenIdToken](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_GetOpenIdToken.html)permintaan.

1. `GetOpenIdToken`mengembalikan token OAuth 2.0 baru yang dikeluarkan oleh kumpulan identitas Anda.

1. Aplikasi Anda menyajikan token baru dalam [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)permintaan.

1. AWS Security Token Service (AWS STS) mengembalikan AWS kredensi.

1. Aplikasi Anda menandatangani permintaan AWS API dengan kredensi sementara.

Alur kerja dasar memberi Anda kontrol yang lebih terperinci atas kredensil yang Anda distribusikan ke pengguna Anda. `GetCredentialsForIdentity`Permintaan authflow yang disempurnakan meminta peran berdasarkan konten token akses. `AssumeRoleWithWebIdentity`Permintaan dalam alur kerja klasik memberi aplikasi Anda kemampuan yang lebih besar untuk meminta kredensil untuk AWS Identity and Access Management peran apa pun yang telah Anda konfigurasikan dengan kebijakan kepercayaan yang memadai. Anda juga dapat meminta durasi sesi peran khusus.

Anda dapat masuk dengan authflow Dasar di kumpulan pengguna yang tidak memiliki pemetaan peran. Jenis kumpulan identitas ini tidak memiliki peran default yang diautentikasi atau tidak diautentikasi, dan tidak memiliki kontrol akses berbasis peran atau atribut yang dikonfigurasi. Saat Anda mencoba `GetOpenIdToken` di kumpulan identitas dengan pemetaan peran, Anda menerima kesalahan berikut.

```
Basic (classic) flow is not supported with RoleMappings, please use enhanced flow.
```

**Urutan operasi dalam otentikasi Dasar**

1. `GetId`

1. `GetOpenIdToken`

1. `AssumeRoleWithWebIdentity`

![\[Diagram yang menunjukkan aliran otentikasi dasar\]](http://docs.aws.amazon.com/id_id/cognito/latest/developerguide/images/amazon-cognito-ext-auth-basic-flow.png)


## Alur otentikasi yang diautentikasi pengembang
<a name="authentication-flow-developer"></a>

Saat menggunakan[Identitas yang diautentikasi pengembang](developer-authenticated-identities.md), klien Anda menggunakan authflow berbeda yang menyertakan kode di luar Amazon Cognito untuk memvalidasi pengguna di sistem autentikasi Anda sendiri. Dari perspektif kumpulan identitas Anda, klaim yang Anda tunjukkan dalam permintaan identitas adalah pengidentifikasi arbitrer, dan otentikasi disahkan oleh kredensi IAM yang Anda enkode dalam aplikasi Anda.

**Urutan operasi dalam otentikasi yang disempurnakan dengan penyedia pengembang**

1. Login melalui Penyedia Developer (kode di luar Amazon Cognito)

1. Validasi login pengguna (kode di luar Amazon Cognito)

1. [GetOpenIdTokenForDeveloperIdentity](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_GetOpenIdTokenForDeveloperIdentity.html)

1. [GetCredentialsForIdentity](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_GetCredentialsForIdentity.html)

![\[Diagram yang menunjukkan aliran otentikasi ditingkatkan yang diautentikasi pengembang\]](http://docs.aws.amazon.com/id_id/cognito/latest/developerguide/images/amazon-cognito-dev-auth-enhanced-flow.png)


**Urutan operasi dalam otentikasi dasar dengan penyedia pengembang**

1. Terapkan logika di luar kumpulan identitas untuk masuk dan menghasilkan pengenal pengembang-penyedia.

1. Ambil kredensial-sisi server AWS yang tersimpan.

1. Kirim pengenal penyedia pengembang dalam permintaan [GetOpenIdTokenForDeveloperIdentity](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_GetOpenIdTokenForDeveloperIdentity.html)API yang ditandatangani dengan AWS kredensi resmi.

1. Minta kredensi aplikasi dengan. [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)

![\[Diagram yang menunjukkan aliran otentikasi dasar yang diautentikasi pengembang\]](http://docs.aws.amazon.com/id_id/cognito/latest/developerguide/images/amazon-cognito-dev-auth-basic-flow.png)


## Alur otentikasi mana yang harus saya terapkan?
<a name="authentication-flow-choosing"></a>

**Aliran yang ditingkatkan** adalah pilihan paling aman dengan tingkat upaya pengembang terendah:
+ Alur yang disempurnakan mengurangi kompleksitas, ukuran, dan laju permintaan API.
+ Aplikasi Anda tidak perlu membuat permintaan API tambahan AWS STS.
+ Kumpulan identitas Anda mengevaluasi pengguna Anda untuk kredensi peran IAM yang harus mereka terima. Anda tidak perlu menanamkan logika untuk pemilihan peran di klien Anda.

**penting**  
Saat Anda membuat kumpulan identitas baru, jangan aktifkan otentikasi dasar (klasik) secara default, sebagai praktik terbaik. Untuk menerapkan otentikasi dasar, pertama-tama evaluasi hubungan kepercayaan peran IAM Anda untuk identitas web. Kemudian bangun logika untuk pemilihan peran ke klien Anda dan amankan klien dari modifikasi oleh pengguna.

**Alur otentikasi dasar** mendelegasikan logika pemilihan peran IAM ke aplikasi Anda. Dalam alur ini, Amazon Cognito memvalidasi sesi yang diautentikasi atau tidak diautentikasi pengguna Anda dan mengeluarkan token yang dapat Anda tukarkan dengan kredensialnya. AWS STS Pengguna dapat menukar token dari otentikasi dasar untuk setiap peran IAM yang mempercayai kumpulan identitas dan`amr`, atau authenticated/unauthenticated status Anda.

Demikian pula, pahami bahwa **otentikasi pengembang** adalah jalan pintas seputar validasi otentikasi penyedia identitas. Amazon Cognito mempercayai AWS kredensil yang mengotorisasi [GetOpenIdTokenForDeveloperIdentity](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_GetOpenIdTokenForDeveloperIdentity.html)permintaan tanpa validasi tambahan dari konten permintaan. Amankan rahasia yang mengotorisasi otentikasi pengembang dari akses oleh pengguna.

## Ikhtisar operasi API alur otentikasi
<a name="authentication-flow-operations"></a>

**GetId**  
Panggilan [GetId](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_GetId.html)API adalah panggilan pertama yang diperlukan untuk membangun identitas baru di Amazon Cognito.    
Akses tidak diautentikasi  
Amazon Cognito dapat memberikan akses tamu yang tidak diautentikasi di aplikasi Anda. Jika fitur ini diaktifkan di kumpulan identitas Anda, pengguna dapat meminta ID identitas baru kapan saja melalui `GetId` API. Aplikasi diharapkan meng-cache ID identitas ini untuk melakukan panggilan berikutnya ke Amazon Cognito. AWS Ponsel SDKs dan AWS SDK untuk JavaScript di Browser memiliki penyedia kredensi yang menangani caching ini untuk Anda.  
Akses yang diautentikasi  
Ketika Anda telah mengonfigurasi aplikasi Anda dengan dukungan untuk penyedia login publik (Facebook, Google\$1, Login with Amazon, atau Masuk dengan Apple), pengguna juga dapat menyediakan token (atau OAuth OpenID Connect) yang mengidentifikasi mereka di penyedia tersebut. Saat digunakan dalam panggilan ke`GetId`, Amazon Cognito membuat identitas baru yang diautentikasi atau mengembalikan identitas yang sudah dikaitkan dengan login tertentu. Amazon Cognito melakukan ini dengan memvalidasi token dengan penyedia dan memastikan hal-hal berikut:  
+ Token valid dan dari penyedia yang dikonfigurasi.
+ Token tidak kedaluwarsa.
+ Token cocok dengan pengenal aplikasi yang dibuat dengan penyedia itu (misalnya, ID aplikasi Facebook).
+ Token cocok dengan pengenal pengguna.

**GetCredentialsForIdentity**  
[GetCredentialsForIdentity](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_GetCredentialsForIdentity.html)API dapat dipanggil setelah Anda membuat ID identitas. Operasi ini secara fungsional setara dengan memanggil [GetOpenIdToken](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_GetOpenIdToken.html), kemudian [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html).  
Agar Amazon Cognito dapat menelepon `AssumeRoleWithWebIdentity` atas nama Anda, kumpulan identitas Anda harus memiliki peran IAM yang terkait dengannya. Anda dapat melakukan ini melalui konsol Amazon Cognito atau secara manual melalui operasi. [SetIdentityPoolRoles](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_SetIdentityPoolRoles.html)

**GetOpenIdToken**  
Buat permintaan [GetOpenIdToken](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_GetOpenIdToken.html)API setelah Anda membuat ID identitas. Cache identitas IDs setelah permintaan pertama Anda, dan mulai sesi dasar (klasik) berikutnya untuk identitas itu`GetOpenIdToken`.  
Respons terhadap permintaan `GetOpenIdToken` API adalah token yang dihasilkan Amazon Cognito. Anda dapat mengirimkan token ini sebagai `WebIdentityToken` parameter dalam [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)permintaan.  
Sebelum Anda mengirimkan token OpenID, verifikasi di aplikasi Anda. Anda dapat menggunakan pustaka OIDC di SDK atau pustaka seperti [https://github.com/awslabs/aws-jwt-verify](https://github.com/awslabs/aws-jwt-verify)untuk mengonfirmasi bahwa Amazon Cognito mengeluarkan token. [ID kunci penandatanganan, atau`kid`, dari token OpenID adalah salah satu yang tercantum dalam dokumen Identitas Amazon Cognito †jwks\$1uri.](https://cognito-identity.amazonaws.com/.well-known/jwks_uri) Kunci-kunci ini dapat berubah. *Fungsi Anda yang memverifikasi token Identitas Amazon Cognito harus memperbarui daftar kuncinya secara berkala dari dokumen jwks\$1uri.* Amazon Cognito menetapkan durasi penyegaran di header respons kontrol cache *jwks\$1uri*, yang saat ini disetel ke 30 hari. `max-age`    
Akses tidak diautentikasi  
Untuk mendapatkan token untuk identitas yang tidak diautentikasi, Anda hanya memerlukan ID identitas itu sendiri. Tidak mungkin mendapatkan token yang tidak diautentikasi untuk identitas atau identitas yang telah diautentikasi yang telah Anda nonaktifkan.  
Akses yang diautentikasi  
Jika Anda memiliki identitas yang diautentikasi, Anda harus memberikan setidaknya satu token yang valid untuk login yang telah dikaitkan dengan identitas tersebut. Semua token yang diteruskan selama `GetOpenIdToken` panggilan harus melewati validasi yang sama yang disebutkan sebelumnya; jika salah satu token gagal, seluruh panggilan gagal. Tanggapan dari `GetOpenIdToken` panggilan juga mencakup ID identitas. Ini karena ID identitas yang Anda lewati mungkin bukan yang dikembalikan.  
Menautkan login  
Jika Anda mengirimkan token untuk login yang belum dikaitkan dengan identitas apa pun, login dianggap “ditautkan” ke identitas terkait. Anda hanya dapat menautkan satu login per penyedia publik. Upaya untuk menautkan lebih dari satu login dengan penyedia publik menghasilkan respons `ResourceConflictException` kesalahan. Jika login hanya ditautkan ke identitas yang ada, ID identitas `GetOpenIdToken` yang dikembalikan sama dengan yang Anda lewatkan.  
Menggabungkan identitas  
Jika Anda memberikan token untuk login yang saat ini tidak ditautkan ke identitas yang diberikan, tetapi ditautkan ke identitas lain, kedua identitas tersebut akan digabungkan. Setelah digabungkan, satu identitas menjadi semua login terkait dan yang lainnya dinonaktifkan. parent/owner Dalam hal ini, ID identitas parent/owner dikembalikan. Anda harus memperbarui cache lokal Anda jika nilai ini berbeda. Penyedia di AWS Ponsel SDKs atau AWS SDK untuk JavaScript di Browser melakukan operasi ini untuk Anda.

**GetOpenIdTokenForDeveloperIdentity**  
[GetOpenIdTokenForDeveloperIdentity](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_GetOpenIdTokenForDeveloperIdentity.html)Operasi menggantikan penggunaan [GetId](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_GetId.html)dan [GetOpenIdToken](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_GetOpenIdToken.html)dari perangkat saat menggunakan identitas otentikasi pengembang. Karena aplikasi Anda menandatangani permintaan ke operasi API ini dengan AWS kredensil, Amazon Cognito percaya bahwa pengenal pengguna yang disediakan dalam permintaan tersebut valid. Otentikasi pengembang menggantikan validasi token yang dilakukan Amazon Cognito dengan penyedia eksternal.  
Payload untuk API ini mencakup `logins` peta. Peta ini harus berisi kunci penyedia pengembang Anda dan nilai sebagai pengenal bagi pengguna di sistem Anda. Jika pengenal pengguna belum ditautkan ke identitas yang ada, Amazon Cognito akan membuat identitas baru dan mengembalikan ID identitas baru dan token OpenID Connect untuk identitas tersebut. Jika pengenal pengguna sudah ditautkan, Amazon Cognito mengembalikan ID identitas yang sudah ada sebelumnya dan token OpenID Connect. Cache identitas pengembang IDs setelah permintaan pertama Anda, dan mulai sesi dasar (klasik) berikutnya untuk identitas itu`GetOpenIdTokenForDeveloperIdentity`.  
Respons terhadap permintaan `GetOpenIdTokenForDeveloperIdentity` API adalah token yang dihasilkan Amazon Cognito. Anda dapat mengirimkan token ini sebagai `WebIdentityToken` parameter dalam `AssumeRoleWithWebIdentity` permintaan.  
Sebelum Anda mengirimkan token OpenID Connect, verifikasi di aplikasi Anda. Anda dapat menggunakan pustaka OIDC di SDK atau pustaka seperti [https://github.com/awslabs/aws-jwt-verify](https://github.com/awslabs/aws-jwt-verify)untuk mengonfirmasi bahwa Amazon Cognito mengeluarkan token. ID kunci penandatanganan, atau`kid`, dari token OpenID Connect adalah salah satu yang tercantum dalam dokumen jwks\$1uri Amazon Cognito [https://cognito-identity.amazonaws.com/.well-known/jwks_uri](https://cognito-identity.amazonaws.com/.well-known/jwks_uri) †. Kunci-kunci ini dapat berubah. *Fungsi Anda yang memverifikasi token Identitas Amazon Cognito harus memperbarui daftar kuncinya secara berkala dari dokumen jwks\$1uri.* Amazon Cognito menetapkan durasi penyegaran di header `cache-control` respons *jwks\$1uri*, yang saat ini disetel ke 30 hari. `max-age`    
Menautkan login  
Seperti penyedia eksternal, menyediakan login tambahan yang belum dikaitkan dengan identitas secara implisit menghubungkan login tersebut ke identitas tersebut. Jika Anda menautkan login penyedia eksternal ke identitas, pengguna dapat menggunakan authflow penyedia eksternal dengan penyedia tersebut. Namun, mereka tidak dapat menggunakan nama penyedia pengembang Anda di peta login saat menelepon `GetId` atau`GetOpenIdToken`.  
Menggabungkan identitas  
Dengan identitas otentikasi pengembang, Amazon Cognito mendukung penggabungan implisit dan penggabungan eksplisit melalui API. [MergeDeveloperIdentities](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_MergeDeveloperIdentities.html) Dengan penggabungan eksplisit, Anda dapat menandai dua identitas dengan pengidentifikasi pengguna di sistem Anda sebagai identitas tunggal. Jika Anda menyediakan pengenal pengguna sumber dan tujuan, Amazon Cognito menggabungkannya. Lain kali Anda meminta token OpenID Connect untuk salah satu pengenal pengguna, id identitas yang sama akan dikembalikan.

**AssumeRoleWithWebIdentity**  
Setelah Anda memiliki token OpenID Connect, Anda kemudian dapat menukar ini untuk AWS kredensi sementara melalui permintaan [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)API ke (). AWS Security Token Service AWS STS  
Karena tidak ada batasan jumlah identitas yang dapat Anda buat, penting untuk memahami izin yang Anda berikan kepada pengguna Anda. Siapkan peran IAM yang berbeda untuk aplikasi Anda: satu untuk pengguna yang tidak diautentikasi, dan satu untuk pengguna yang diautentikasi. Konsol Amazon Cognito dapat membuat peran default saat pertama kali menyiapkan kumpulan identitas. Peran ini secara efektif tidak memiliki izin yang diberikan. Ubah mereka untuk memenuhi kebutuhan Anda.  
Pelajari lebih lanjut tentang [Kepercayaan peran dan izin](iam-roles.md#role-trust-and-permissions).

† Dokumen [https://cognito-identity.amazonaws.com/.well-known/jwks_uri](https://cognito-identity.amazonaws.com/.well-known/jwks_uri) Identitas Amazon Cognito default berisi informasi tentang kunci yang menandatangani token untuk kumpulan identitas di sebagian besar. Wilayah AWS Daerah berikut memiliki dokumen *jwks\$1uri* yang berbeda.


| Wilayah AWS | Jalur ke dokumen *jwks\$1uri* | 
| --- |--- |
| AWS GovCloud (AS-Barat) | https://cognito-identity.us-gov-west-1.amazonaws.com/.well-known/jwks\$1uri | 
| Tiongkok (Beijing) | https://cognito-identity---cn-north-1.amazonaws.com.rproxy.govskope.ca.cn/.well-known/jwks\$1uri | 
| Opt-in Regions seperti Eropa (Milan) dan Afrika (Cape Town) | https://cognito-identity.Region.amazonaws.com/.well-known/jwks\$1uri | 

Anda juga dapat mengekstrapolasi *jwks\$1uri* dari penerbit atau yang `iss` Anda terima di token OpenID dari Amazon Cognito. Titik akhir penemuan standar OIDC `<issuer>/.well-known/openid-configuration` mencantumkan jalur ke *jwks\$1uri* untuk token Anda.

# Peran IAM
<a name="iam-roles"></a>

Saat membuat kumpulan identitas, Anda diminta untuk memperbarui peran IAM yang diasumsikan pengguna Anda. IAM role bekerja seperti ini: Saat pengguna masuk ke aplikasi Anda, Amazon Cognito menghasilkan kredensial AWS sementara untuk pengguna. Kredensial sementara ini terkait dengan IAM role tertentu. Dengan peran IAM, Anda dapat menentukan serangkaian izin untuk mengakses sumber daya Anda AWS .

Anda dapat menentukan IAM role default untuk pengguna yang terautentikasi dan tidak terautentikasi. Selain itu, Anda dapat menentukan aturan untuk memilih peran untuk setiap pengguna berdasarkan klaim di token ID pengguna. Untuk informasi selengkapnya, lihat [Menggunakan kontrol akses berbasis peran](role-based-access-control.md).

Secara default, konsol Amazon Cognito membuat peran IAM yang menyediakan akses ke Amazon Mobile Analytics dan ke Amazon Cognito Sync. Atau, Anda dapat memilih untuk menggunakan IAM role yang sudah ada.

Ubah peran IAM untuk mengizinkan atau membatasi akses ke layanan lain. Untuk melakukannya, [masuk ke Konsol IAM](https://console.aws.amazon.com/iam/home). Kemudian pilih **Peran**, dan pilih peran. Kebijakan yang dilampirkan pada peran yang dipilih tercantum di tab **Izin**. Anda dapat menyesuaikan kebijakan akses dengan memilih tautan **Kelola Kebijakan** yang sesuai. Untuk mempelajari lebih lanjut tentang menggunakan dan menentukan kebijakan, lihat [Ikhtisar Kebijakan IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/PoliciesOverview.html).

**catatan**  
Sebagai praktik terbaik, tentukan kebijakan yang mengikuti prinsip pemberian *hak istimewa minimal*. Dengan kata lain, kebijakan mencakup hanya izin yang diperlukan pengguna untuk melakukan tugas-tugas mereka. Untuk informasi lebih lanjut, lihat [Memberikan Hak Akses Minimal](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) dalam *Panduan Pengguna IAM*.  
Ingat bahwa identitas yang tidak diautentikasi diasumsikan oleh pengguna yang tidak masuk ke aplikasi Anda. Biasanya, izin yang Anda tetapkan untuk identitas yang tidak diautentikasi harus lebih ketat daripada untuk identitas diautentikasi.

**Topics**
+ [Menyiapkan kebijakan kepercayaan](#trust-policies)
+ [Kebijakan akses](#access-policies)
+ [Kepercayaan peran dan izin](#role-trust-and-permissions)

## Menyiapkan kebijakan kepercayaan
<a name="trust-policies"></a>

Amazon Cognito menggunakan peran IAM untuk menghasilkan kredensil sementara bagi pengguna aplikasi Anda. Akses ke izin dikendalikan oleh hubungan kepercayaan peran. Pelajari selengkapnya tentang [Kepercayaan peran dan izin](#role-trust-and-permissions). Pialang Amazon Cognito menghubungkan antara AWS STS dan kumpulan identitas. IdPs

Token yang disajikan AWS STS dihasilkan oleh kumpulan identitas, yang menerjemahkan kumpulan pengguna, sosial, atau token penyedia OIDC, atau pernyataan SAMP, ke tokennya sendiri. Token kumpulan identitas berisi `aud` klaim yang merupakan ID kumpulan identitas.

Jika kebijakan kepercayaan peran IAM adalah prinsip layanan kumpulan identitas seperti`cognito-identity.amazonaws.com`, Anda tidak dapat membuat atau memodifikasi kebijakan kepercayaan peran sehingga mereka mengizinkan kumpulan identitas apa pun untuk mengambil peran tersebut. `Principal` Dengan prinsipal kumpulan identitas, `Action` elemen harus memiliki `Condition` persyaratan yang hanya `AssumeRoleWithWebIndentity` dilakukan oleh kumpulan identitas Anda, seperti yang ditentukan oleh kunci kondisi seperti`cognito-identity.amazonaws.com:aud`. Kunci kondisi lain tersedia, tetapi `aud` diperlukan. Jika Anda mencoba menyimpan kebijakan kepercayaan peran tanpa kondisi jenis ini, IAM akan mengembalikan kesalahan.

Untuk informasi selengkapnya tentang kunci federasi OIDC (identitas web), lihat Kunci yang [tersedia untuk federasi AWS OIDC](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_iam-condition-keys.html#condition-keys-wif).

Berikut ini adalah kunci kondisi federasi OIDC yang tersedia untuk Amazon Cognito.

**`cognito-identity.amazonaws.com:aud`**  
Membatasi peran untuk operasi dari satu atau lebih kumpulan identitas. Amazon Cognito menunjukkan kumpulan identitas sumber dalam `aud` klaim dalam token kumpulan identitas.

**`cognito-identity.amazonaws.com:amr`**  
Membatasi peran untuk salah satu `authenticated` atau `unauthenticated` (tamu) pengguna. Amazon Cognito menunjukkan status otentikasi dalam `amr` klaim di token kumpulan identitas.

**`cognito-identity.amazonaws.com:sub`**  
Membatasi peran untuk satu atau lebih pengguna oleh [UUID](cognito-terms.md#terms-uuid). UUID ini adalah ID identitas pengguna di kolam identitas. Nilai ini bukan `sub` nilai dari penyedia identitas asli pengguna. Amazon Cognito menunjukkan UUID ini dalam `sub` klaim di token kumpulan identitas.

Contoh kebijakan kepercayaan peran berikut memungkinkan prinsipal layanan federasi `cognito-identity.amazonaws.com` untuk memanggil AWS STS API`AssumeRoleWithWebIdentity`. Permintaan hanya akan berhasil jika token kumpulan identitas dalam permintaan API memiliki klaim berikut.

1. `aud`Klaim ID kumpulan identitas`us-west-2:abcdefg-1234-5678-910a-0e8443553f95`.

1. `amr`Klaim `authenticated` tersebut ditambahkan saat pengguna masuk dan bukan pengguna tamu.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Federated": "cognito-identity.amazonaws.com"
            },
            "Action": "sts:AssumeRoleWithWebIdentity",
            "Condition": {
                "StringEquals": {
                    "cognito-identity.amazonaws.com:aud": "us-west-2:abcdefg-1234-5678-910a-0e8443553f95"
                },
                "ForAnyValue:StringLike": {
                    "cognito-identity.amazonaws.com:amr": "authenticated"
                }
            }
        }
    ]
}
```

------

### Kebijakan kepercayaan untuk peran IAM dalam otentikasi Dasar (Klasik)
<a name="trust-policies-classic"></a>

**Ringkasan**  
Kumpulan identitas hanya dapat mengambil peran atas nama pengguna dalam [alur otentikasi](authentication-flow.md#authentication-flow-basic) Dasar ketika kebijakan kepercayaan peran target berisi `aud` kondisi.

Autentikasi dasar memiliki batasan yang sama pada kebijakan kepercayaan peran tidak aman seperti otentikasi yang disempurnakan: Anda tidak dapat menyimpan kebijakan kepercayaan peran yang gagal membatasi kumpulan identitas yang didukung dengan suatu kondisi. `aud` Batasan ini tidak diberlakukan saat layanan diluncurkan. Sebelum penerapan persyaratan ini, Anda dapat membuat kebijakan kepercayaan peran yang tidak memiliki kondisi keamanan tambahan. Setelah penerapan persyaratan ini, AWS STS mengizinkan identitas web untuk mengambil peran yang tidak dijamin dengan kondisi, tetapi peran tersebut **tidak dapat dimodifikasi** tanpa memperkenalkan kondisi tersebut.

Autentikasi aliran yang ditingkatkan mengharuskan peran IAM sama Akun AWS dengan kumpulan identitas. Tetapi dalam otentikasi dasar, di mana aplikasi Anda menyusun `AssumeRoleWithWebIdentity` permintaan, aplikasi Anda dapat meminta untuk mengambil peran dalam akun yang berbeda. Permintaan peran asumsi [lintas akun](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html) Anda akan gagal, jika peran tujuan memiliki kebijakan kepercayaan lama yang tidak memberlakukan kondisi tersebut. `aud`

Token yang dikeluarkan oleh kumpulan identitas untuk identitas berisi informasi tentang Akun AWS asal kumpulan identitas. Saat Anda menampilkan token kumpulan identitas dalam permintaan [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)API, AWS STS periksa apakah kumpulan identitas asal Akun AWS sama dengan peran IAM. Jika AWS STS menentukan bahwa permintaan tersebut lintas akun, ia memeriksa untuk melihat apakah kebijakan kepercayaan peran memiliki `aud` kondisi. **Panggilan peran asumsi gagal** jika tidak ada kondisi seperti itu dalam kebijakan kepercayaan peran. Jika permintaan tidak lintas akun, AWS STS tidak memberlakukan pembatasan ini. Sebagai praktik terbaik, selalu terapkan kondisi jenis ini pada kebijakan kepercayaan peran kumpulan identitas Anda.

Berikut ini adalah contoh kebijakan kepercayaan yang memenuhi persyaratan *minimum* untuk peran IAM untuk otentikasi dasar dengan beberapa kumpulan identitas. Sebagai praktik terbaik, izinkan hanya identitas yang diautentikasi dengan suatu `"cognito-identity.amazonaws.com:amr": "authenticated"` kondisi juga.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Federated": "cognito-identity.amazonaws.com"
            },
            "Action": "sts:AssumeRoleWithWebIdentity",
            "Condition": {
                "StringEquals": {
                    "cognito-identity.amazonaws.com:aud": [
                        "us-west-2:abcdefg-1234-5678-910a-0e8443553f95",
                        "us-west-2:hijklmo-5678-9101-112b-0e4221776g96",
                        "us-west-2:pqrstuv-9101-1121-314c-0e2110887h97"
                    ]
                }
            }
        }
    ]
}
```

------

### Ketentuan kebijakan kepercayaan tambahan
<a name="trust-policies-examples"></a>

Anda dapat menggunakan ketentuan kebijakan kepercayaan berikut untuk menentukan kumpulan identitas sumber, identitas, dan penyedia yang dapat mengambil peran IAM.

**catatan**  
Jangan terapkan kunci [aws:SourceIp](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-sourceip)kondisi dalam kebijakan kepercayaan untuk peran IAM yang diasumsikan oleh kumpulan identitas dalam alur [otentikasi yang disempurnakan](authentication-flow.md#authentication-flow-enhanced). Karena aliran yang ditingkatkan menghasilkan [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)permintaan atas nama aplikasi Anda, IP sumber permintaan tidak akan menjadi IP klien aplikasi Anda, dan kondisinya tidak akan pernah terpenuhi. Kunci kondisi berbasis jaringan berlaku untuk peran yang diasumsikan oleh kumpulan identitas *hanya* melalui [aliran dasar](authentication-flow.md#authentication-flow-basic), yang tidak memiliki fitur sisi layanan dari aliran yang ditingkatkan.

**Gunakan kembali peran di seluruh kumpulan identitas**  
Untuk menggunakan kembali peran di seluruh kolam identitas, karena mereka berbagi serangkaian izin umum, Anda dapat menyertakan beberapa kolam identitas, seperti ini:

```
"StringEquals": {
    "cognito-identity.amazonaws.com:aud": [
        "us-east-1:12345678-abcd-abcd-abcd-123456790ab",
        "us-east-1:98765432-dcba-dcba-dcba-123456790ab"
    ]
}
```

**Batasi akses ke identitas tertentu**  
Untuk membuat kebijakan terbatas pada serangkaian pengguna aplikasi tertentu, periksa nilai `cognito-identity.amazonaws.com:sub`:

```
"StringEquals": {
    "cognito-identity.amazonaws.com:aud": "us-east-1:12345678-abcd-abcd-abcd-123456790ab",
    "cognito-identity.amazonaws.com:sub": [
        "us-east-1:12345678-1234-1234-1234-123456790ab",
        "us-east-1:98765432-1234-1234-1243-123456790ab"
    ]
}
```

**Batasi akses ke penyedia tertentu**  
Untuk membuat kebijakan terbatas untuk pengguna yang telah login dengan penyedia tertentu (mungkin penyedia login Anda sendiri), periksa nilai `cognito-identity.amazonaws.com:amr`:

```
"ForAnyValue:StringLike": {
    "cognito-identity.amazonaws.com:amr": "login.myprovider.myapp"
}
```

Sebagai contoh, sebuah aplikasi yang hanya mempercayai Facebook akan memiliki klausa amr berikut:

```
"ForAnyValue:StringLike": {
    "cognito-identity.amazonaws.com:amr": "graph.facebook.com"
}
```

## Kebijakan akses
<a name="access-policies"></a>

Izin yang Anda lampirkan ke peran berlaku untuk semua pengguna yang mengambil peran tersebut. Untuk mempartisi akses pengguna Anda, gunakan kondisi kebijakan dan variabel. Untuk informasi selengkapnya, lihat [elemen kebijakan IAM: Variabel dan tag](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_variables.html). Anda dapat menggunakan `sub` kondisi untuk membatasi tindakan ke IDs identitas Amazon Cognito dalam kebijakan akses Anda. Gunakan opsi ini dengan hati-hati, terutama untuk identitas yang tidak diautentikasi, yang tidak memiliki ID pengguna yang konsisten. *Untuk informasi selengkapnya tentang variabel kebijakan IAM untuk federasi web dengan Amazon Cognito, [lihat IAM AWS STS dan kunci konteks kondisi](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_iam-condition-keys.html#condition-keys-wif) di AWS Identity and Access Management Panduan Pengguna.*

[Untuk perlindungan keamanan tambahan, Amazon Cognito menerapkan kebijakan penurunan cakupan ke kredensional yang Anda tetapkan kepada pengguna yang tidak diautentikasi dalam alur yang disempurnakan, gunakan.](https://docs.aws.amazon.com/cognito/latest/developerguide/authentication-flow.html) `GetCredentialsForIdentity` Kebijakan cakupan bawah menambahkan [Kebijakan sesi inline](#access-policies-inline-policy) dan ke kebijakan IAM yang Anda [AWS kebijakan sesi terkelola](#access-policies-managed-policy) terapkan pada peran Anda yang tidak diautentikasi. Karena Anda harus memberikan akses baik dalam kebijakan IAM untuk peran Anda dan kebijakan sesi, kebijakan cakupan bawah membatasi akses pengguna ke layanan selain yang ada dalam daftar berikut.

**catatan**  
Dalam alur dasar (klasik), Anda membuat permintaan [https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)API sendiri, dan dapat menerapkan batasan ini pada permintaan. Sebagai praktik keamanan terbaik, jangan tetapkan izin apa pun di atas kebijakan cakupan bawah ini kepada pengguna yang tidak diautentikasi.

Amazon Cognito juga mencegah pengguna yang diautentikasi dan tidak diautentikasi membuat permintaan API ke kumpulan identitas Amazon Cognito dan Sinkronisasi Amazon Cognito. Lain Layanan AWS mungkin menempatkan pembatasan akses layanan dari identitas web.

Dalam permintaan yang berhasil dengan alur yang disempurnakan, Amazon Cognito membuat permintaan `AssumeRoleWithWebIdentity` API di latar belakang. Di antara parameter dalam permintaan ini, Amazon Cognito menyertakan yang berikut ini.

1. ID identitas pengguna Anda.

1. ARN dari peran IAM yang ingin diasumsikan oleh pengguna Anda.

1. `policy`Parameter yang menambahkan *kebijakan sesi inline*.

1. `PolicyArns.member.N`Parameter yang nilainya adalah *kebijakan AWS terkelola* yang memberikan izin tambahan di Amazon. CloudWatch

### Layanan yang dapat diakses oleh pengguna yang tidak diautentikasi
<a name="access-policies-scope-down-services"></a>

Saat Anda menggunakan alur yang disempurnakan, kebijakan penurun cakupan yang diterapkan Amazon Cognito pada sesi pengguna mencegah mereka menggunakan layanan apa pun selain yang tercantum dalam tabel berikut. Untuk subset layanan, hanya tindakan spesifik yang diizinkan.


| Kategori | Layanan | 
| --- | --- | 
|  Analitik  |  Amazon Data Firehose Layanan Terkelola Amazon untuk Apache Flink  | 
|  Integrasi Aplikasi  |  Amazon Simple Queue Service  | 
| AR & VR |  Amazon Sumeria¹  | 
| Aplikasi Bisnis |  Amazon Mobile Analytics Layanan Email Sederhana Amazon  | 
| Hitung |  AWS Lambda  | 
| Kriptografi & PKI |  AWS Key Management Service¹  | 
| Basis Data |  Amazon DynamoDB Amazon SimpleDB  | 
| Web & Seluler Front-end |  AWS AppSync Amazon Location Service Layanan Notifikasi Sederhana Amazon Amazon Pinpoint Amazon Location Service  | 
| Pengembangan Game |   GameLift Peladen Amazon  | 
| Internet of Things (IoT) |  AWS IoT  | 
| Machine Learning |  Amazon CodeWhisperer Amazon Comprehend Amazon Lex Amazon Machine Learning Amazon Personalize Amazon Polly Amazon Rekognition Amazon SageMaker AI¹ Amazon Textract¹ Amazon Transcribe Amazon Translate  | 
| Manajemen & Tata Kelola |  Amazon CloudWatch  CloudWatch Log Amazon  | 
| Jaringan & Pengiriman Konten |  Amazon API Gateway  | 
| Keamanan, Identitas, & Kepatuhan |  Kumpulan pengguna Amazon Cognito  | 
| Penyimpanan |  Amazon Simple Storage Service  | 

¹ Layanan AWS Untuk tabel berikut, kebijakan inline memberikan subset tindakan. Tabel menampilkan tindakan yang tersedia di masing-masing.


| Layanan AWS | Izin maksimum untuk pengguna aliran yang disempurnakan yang tidak diautentikasi | 
| --- | --- | 
| AWS Key Management Service |  `Encrypt` `Decrypt` `ReEncryptTo` `ReEncryptFrom` `GenerateDataKey` `GenerateDataKeyPair` `GenerateDataKeyPair` `GenerateDataKeyPairWithoutPlaintext` `GenerateDataKeyWithoutPlaintext`  | 
| Amazon SageMaker AI |  `InvokeEndpoint`  | 
| Amazon Textract |  `DetectDocumentText` `AnalyzeDocument`  | 
| Amazon Sumerian |  `View*`  | 
| Amazon Location Service |  `SearchPlaceIndex*` `GetPlace` `CalculateRoute*` `*Geofence` `*Geofences` `*DevicePosition*`  | 

Untuk memberikan akses ke Layanan AWS luar daftar ini, aktifkan **alur otentikasi dasar (klasik)** di kumpulan identitas Anda. Jika pengguna Anda melihat `NotAuthorizedException` kesalahan Layanan AWS yang diizinkan oleh kebijakan yang ditetapkan ke peran IAM untuk pengguna yang tidak diautentikasi, evaluasi apakah Anda dapat menghapus layanan tersebut dari kasus penggunaan Anda. Jika Anda tidak bisa, beralihlah ke aliran dasar.

### Kebijakan sesi inline untuk pengguna tamu
<a name="access-policies-inline-policy"></a>

Amazon Cognito pertama-tama menerapkan kebijakan sebaris dalam permintaan kredensional IAM. Kebijakan sesi inline membatasi izin efektif pengguna Anda untuk menyertakan akses ke Layanan AWS bagian luar yang ada dalam daftar berikut. Anda juga harus memberikan izin untuk ini Layanan AWS dalam kebijakan yang Anda terapkan pada peran IAM pengguna. Izin efektif pengguna untuk sesi peran yang diasumsikan adalah persimpangan kebijakan yang ditetapkan untuk peran mereka, dan kebijakan sesi mereka. Untuk informasi selengkapnya, lihat [Kebijakan sesi](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) di *Panduan AWS Identity and Access Management Pengguna*.

Amazon Cognito menambahkan kebijakan sebaris berikut ke sesi untuk pengguna Anda Wilayah AWS yang diaktifkan secara default. Untuk gambaran umum tentang efek bersih dari kebijakan inline dan kebijakan sesi lainnya, lihat[Layanan yang dapat diakses oleh pengguna yang tidak diautentikasi](#access-policies-scope-down-services).

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "cloudwatch:*",
                "logs:*",
                "dynamodb:*",
                "kinesis:*",
                "mobileanalytics:*",
                "s3:*",
                "ses:*",
                "sns:*",
                "sqs:*",
                "lambda:*",
                "machinelearning:*",
                "execute-api:*",
                "iot:*",
                "gamelift:*",
                "cognito-identity:*",
                "cognito-idp:*",
                "lex:*",
                "polly:*",
                "comprehend:*",
                "translate:*",
                "transcribe:*",
                "rekognition:*",
                "mobiletargeting:*",
                "firehose:*",
                "appsync:*",
                "personalize:*",
                "sagemaker:InvokeEndpoint",
                "cognito-sync:*",
                "codewhisperer:*",
                "textract:DetectDocumentText",
                "textract:AnalyzeDocument",
                "sdb:*"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}
```

------

Untuk semua Wilayah lainnya, kebijakan inline scope-down mencakup semua yang tercantum di Wilayah default kecuali untuk pernyataan berikut. `Action`

```
                "cognito-sync:*",
                "sumerian:View*",
                "codewhisperer:*",
                "textract:DetectDocumentText",
                "textract:AnalyzeDocument",
                "sdb:*"
```

### Kebijakan sesi AWS terkelola untuk tamu
<a name="access-policies-managed-policy"></a>

Amazon Cognito juga menerapkan kebijakan AWS terkelola sebagai kebijakan sesi untuk sesi peningkatan aliran tamu yang tidak diautentikasi. Kebijakan ini membatasi cakupan izin pengguna yang tidak diautentikasi dengan kebijakan tersebut. `AmazonCognitoUnAuthedIdentitiesSessionPolicy`

Anda juga harus memberikan izin ini dalam kebijakan yang Anda lampirkan ke peran IAM Anda yang tidak diautentikasi. Izin efektif pengguna untuk sesi peran yang diasumsikan adalah persimpangan kebijakan IAM yang ditetapkan untuk peran mereka, dan kebijakan sesi mereka. Untuk informasi selengkapnya, lihat [Kebijakan sesi](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html#policies_session) di *Panduan AWS Identity and Access Management Pengguna*.

Untuk gambaran umum tentang efek bersih dari kebijakan AWS terkelola ini dan kebijakan sesi lainnya, lihat[Layanan yang dapat diakses oleh pengguna yang tidak diautentikasi](#access-policies-scope-down-services).

Kebijakan `AmazonCognitoUnAuthedIdentitiesSessionPolicy` terkelola memiliki izin berikut.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
        "Effect": "Allow",
        "Action": [
            "rum:PutRumEvents",
            "polly:*",
            "comprehend:*",
            "translate:*",
            "transcribe:*",
            "rekognition:*",
            "mobiletargeting:*",
            "firehose:*",
            "personalize:*",
            "sagemaker:InvokeEndpoint",
            "geo:GetMap*",
            "geo:SearchPlaceIndex*",
            "geo:GetPlace",
            "geo:CalculateRoute*",
            "geo:*Geofence",
            "geo:*Geofences",
            "geo:*DevicePosition*",
            "kms:Encrypt",
            "kms:Decrypt",
            "kms:ReEncryptTo",
            "kms:ReEncryptFrom",
            "kms:GenerateDataKey",
            "kms:GenerateDataKeyPair",
            "kms:GenerateDataKeyPairWithoutPlaintext",
            "kms:GenerateDataKeyWithoutPlaintext"
        ],
        "Resource": "*"
    }]
}
```

------

### Contoh kebijakan akses
<a name="access-policy-examples"></a>

Di bagian ini, Anda dapat menemukan contoh kebijakan akses Amazon Cognito yang memberi pengguna izin minimum yang diperlukan untuk melakukan operasi tertentu. Anda dapat lebih membatasi izin untuk ID identitas yang diberikan dengan menggunakan variabel kebijakan jika memungkinkan. Misalnya, menggunakan \$1\$1cognito-identity.amazonaws.com:sub\$1. Untuk informasi selengkapnya, lihat: [Memahami Autentikasi Amazon Cognito Bagian 3: Peran dan Kebijakan](https://aws.amazon.com/blogs/mobile/understanding-amazon-cognito-authentication-part-3-roles-and-policies/) pada *Blog Seluler AWS *.

**catatan**  
Sebagai praktik terbaik keamanan, kebijakan harus menyertakan hanya izin yang diperlukan pengguna untuk melakukan tugas-tugas mereka. Ini berarti bahwa Anda harus mencoba untuk selalu menjangkau akses ke identitas individu untuk objek bila memungkinkan.

**Berikan akses baca identitas ke satu objek di Amazon S3**  
Kebijakan akses berikut memberikan izin baca ke identitas untuk mengambil objek tunggal dari bucket S3 yang diberikan.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": ["arn:aws:s3:::amzn-s3-demo-bucket/assets/my_picture.jpg"]
    }
  ]
}
```

------

**Berikan identitas akses baca dan tulis ke jalur khusus identitas di Amazon S3**  
Kebijakan akses berikut memberikan izin baca dan tulis untuk mengakses “folder” prefiks tertentu di bucket S3 dengan memetakan awalan ke variabel `${cognito-identity.amazonaws.com:sub}`.

Dengan kebijakan ini, identitas seperti yang `us-east-1:12345678-1234-1234-1234-123456790ab` disisipkan via `${cognito-identity.amazonaws.com:sub}` bisa mendapatkan, menempatkan, dan mencantumkan objek ke dalamnya`arn:aws:s3:::amzn-s3-demo-bucket/us-east-1:12345678-1234-1234-1234-123456790ab`. Namun, identitas tidak akan diberikan akses ke objek lain di `arn:aws:s3:::amzn-s3-demo-bucket`.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Action": ["s3:ListBucket"],
      "Effect": "Allow",
      "Resource": ["arn:aws:s3:::amzn-s3-demo-bucket"],
      "Condition": {"StringLike": {"s3:prefix": ["${cognito-identity.amazonaws.com:sub}/*"]}}
    },
    {
      "Action": [
        "s3:GetObject",
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": ["arn:aws:s3:::amzn-s3-demo-bucket/${cognito-identity.amazonaws.com:sub}/*"]
    }
  ]
}
```

------

Model akses serupa dicapai dengan [Amazon S3 Access](https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-grants.html) Grants.

**Tetapkan identitas akses berbutir halus ke Amazon DynamoDB**  
Kebijakan akses berikut menyediakan kontrol akses berbutir halus ke sumber daya DynamoDB menggunakan variabel lingkungan Amazon Cognito. Variabel ini memberikan akses ke item di DynamoDB dengan ID identitas. Untuk informasi selengkapnya, lihat [Menggunakan Kondisi Kebijakan IAM untuk Kontrol Akses Mendetail](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/specifying-conditions.html) di *Panduan Developer Amazon DynamoDB*.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "dynamodb:GetItem",
        "dynamodb:BatchGetItem",
        "dynamodb:Query",
        "dynamodb:PutItem",
        "dynamodb:UpdateItem",
        "dynamodb:DeleteItem",
        "dynamodb:BatchWriteItem"
      ],
      "Resource": [
        "arn:aws:dynamodb:us-west-2:123456789012:table/MyTable"
      ],
      "Condition": {
        "ForAllValues:StringEquals": {
          "dynamodb:LeadingKeys":  ["${cognito-identity.amazonaws.com:sub}"]
        }
      }
    }
  ]
}
```

------

**Berikan izin identitas untuk menjalankan fungsi Lambda**  
Kebijakan akses berikut memberikan izin identitas untuk menjalankan fungsi Lambda.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
         { 
             "Effect": "Allow",
             "Action": "lambda:InvokeFunction",
             "Resource": [
                 "arn:aws:lambda:us-west-2:123456789012:function:MyFunction"
             ]
         }
     ]
 }
```

------

**Berikan izin identitas untuk mempublikasikan catatan ke Kinesis Data Streams**  
Kebijakan akses berikut mengizinkan identitas untuk menggunakan operasi `PutRecord` dengan salah satu Kinesis Data Streams. Hal ini dapat diterapkan pada pengguna yang perlu menambahkan catatan data ke semua aliran di akun. Untuk informasi lebih lanjut, lihat [Mengontrol Akses ke Sumber Daya Amazon Kinesis Data Streams Menggunakan IAM](https://docs.aws.amazon.com/streams/latest/dev/controlling-access.html) di *Panduan Developer Amazon Kinesis Data Streams*.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "kinesis:PutRecord",
            "Resource": [
                "arn:aws:kinesis:us-east-1:111122223333:stream/stream1"
            ]
        }
    ]
}
```

------

**Berikan akses identitas ke data mereka di toko Amazon Cognito Sync**  
Kebijakan akses berikut memberikan izin identitas untuk hanya mengakses data mereka sendiri di toko Sinkronisasi Amazon Cognito.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement":[{
      "Effect":"Allow",
      "Action":"cognito-sync:*",
      "Resource":["arn:aws:cognito-sync:us-east-1:123456789012:identitypool/${cognito-identity.amazonaws.com:aud}/identity/${cognito-identity.amazonaws.com:sub}/*"]
      }]
  }
```

------

## Kepercayaan peran dan izin
<a name="role-trust-and-permissions"></a>

Cara peran ini berbeda adalah dalam hubungan kepercayaan mereka. Berikut ini adalah contoh kebijakan kepercayaan untuk peran yang tidak diautentikasi:

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Federated": "cognito-identity.amazonaws.com"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "cognito-identity.amazonaws.com:aud": "us-east-1:12345678-corner-cafe-123456790ab"
        },
        "ForAnyValue:StringLike": {
          "cognito-identity.amazonaws.com:amr": "unauthenticated"
        }
      }
    }
  ]
}
```

------

Kebijakan ini memberikan izin kepada pengguna federasi dari `cognito-identity.amazonaws.com` (penerbit token OpenID Connect) untuk mengambil peran ini. Selain itu, kebijakan membatasi `aud` pada token, dalam hal ini ID kolam identitas, untuk mencocokkan kolam identitas tersebut. Terakhir, kebijakan menetapkan bahwa salah satu anggota array dari `amr` klaim multi-nilai token yang dikeluarkan oleh operasi Amazon `GetOpenIdToken` Cognito API memiliki nilai. `unauthenticated`

Saat Amazon Cognito membuat token, ia menetapkan token sebagai salah satu atau`unauthenticated`. `amr` `authenticated` Jika `amr` ya`authenticated`, token mencakup penyedia apa pun yang digunakan selama otentikasi. Ini berarti Anda dapat membuat peran yang hanya mempercayai pengguna yang masuk melalui Facebook dengan mengubah `amr` kondisi seperti yang ditunjukkan:

```
"ForAnyValue:StringLike": {
  "cognito-identity.amazonaws.com:amr": "graph.facebook.com"
}
```

Berhati-hatilah saat mengubah hubungan kepercayaan Anda pada peran Anda, atau saat mencoba menggunakan peran di seluruh kolam identitas. Jika Anda tidak mengonfigurasi peran Anda dengan benar untuk mempercayai kumpulan identitas Anda, pengecualian dari hasil STS, seperti berikut ini:

```
AccessDenied -- Not authorized to perform sts:AssumeRoleWithWebIdentity
```

Jika Anda melihat pesan ini, periksa apakah kumpulan identitas dan jenis otentikasi Anda memiliki peran yang sesuai.

# Praktik terbaik keamanan untuk kumpulan identitas Amazon Cognito
<a name="identity-pools-security-best-practices"></a>

Kumpulan identitas Amazon Cognito menyediakan AWS kredensil sementara untuk aplikasi Anda. Akun AWS sering berisi sumber daya yang dibutuhkan pengguna aplikasi Anda, dan sumber daya back-end pribadi. Peran dan kebijakan IAM yang membentuk AWS kredensil dapat memberikan akses ke salah satu sumber daya ini.

Praktik terbaik utama konfigurasi kumpulan identitas adalah memastikan bahwa aplikasi Anda dapat menyelesaikan pekerjaan tanpa kelebihan atau hak istimewa yang tidak diinginkan. Untuk mencegah kesalahan konfigurasi keamanan, tinjau rekomendasi ini sebelum peluncuran setiap aplikasi yang ingin Anda rilis ke produksi.

**Topics**
+ [Praktik terbaik konfigurasi IAM](#identity-pools-security-best-practices-iam)
+ [Praktik terbaik konfigurasi kumpulan identitas](#identity-pools-security-best-practices-cib)

## Praktik terbaik konfigurasi IAM
<a name="identity-pools-security-best-practices-iam"></a>

Saat tamu atau pengguna yang diautentikasi memulai sesi di aplikasi Anda yang memerlukan kredensi kumpulan identitas, aplikasi Anda akan mengambil kredensi sementara AWS untuk peran IAM. Kredensialnya mungkin untuk peran default, peran yang dipilih berdasarkan aturan dalam konfigurasi kumpulan identitas, atau untuk peran khusus yang dipilih oleh aplikasi Anda. Dengan izin yang ditetapkan untuk setiap peran, pengguna Anda mendapatkan akses ke AWS sumber daya Anda.

Untuk informasi selengkapnya tentang praktik terbaik IAM umum, lihat [praktik terbaik IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) di AWS Identity and Access Management Panduan Pengguna.

### Gunakan kondisi kebijakan kepercayaan dalam peran IAM
<a name="identity-pools-security-best-practices-iam-conditions"></a>

IAM mensyaratkan bahwa peran untuk kumpulan identitas memiliki setidaknya satu kondisi kebijakan kepercayaan. Kondisi ini dapat, misalnya, mengatur cakupan peran ke pengguna yang diautentikasi saja. AWS STS juga mensyaratkan bahwa permintaan otentikasi dasar lintas akun memiliki dua kondisi khusus: `cognito-identity.amazonaws.com:aud` dan. `cognito-identity.amazonaws.com:amr` Sebagai praktik terbaik, terapkan kedua kondisi ini di semua peran IAM yang mempercayai prinsip `cognito-identity.amazonaws.com` layanan kumpulan identitas.
+ `cognito-identity.amazonaws.com:aud`: Klaim *aud* dalam token kumpulan identitas harus cocok dengan ID kumpulan identitas tepercaya.
+ `cognito-identity.amazonaws.com:amr`*: Klaim *amr* dalam token kumpulan identitas harus diautentikasi atau tidak *diautentikasi*.* Dengan kondisi ini, Anda dapat memesan akses ke peran hanya untuk tamu yang tidak diautentikasi, atau hanya untuk pengguna yang diautentikasi. Anda dapat menyempurnakan nilai kondisi ini lebih lanjut untuk membatasi peran kepada pengguna dari penyedia tertentu, misalnya. `graph.facebook.com`

Contoh kebijakan kepercayaan peran berikut memberikan akses ke peran dalam kondisi berikut:

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Federated": "cognito-identity.amazonaws.com"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "cognito-identity.amazonaws.com:aud": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
        },
        "ForAnyValue:StringLike": {
          "cognito-identity.amazonaws.com:amr": "authenticated"
        }
      }
    }
  ]
}
```

------

**Elemen yang berhubungan dengan kumpulan identitas**
+ `"Federated": "cognito-identity.amazonaws.com"`: Pengguna harus berasal dari kumpulan identitas.
+ `"cognito-identity.amazonaws.com:aud": "us-east-1:a1b2c3d4-5678-90ab-cdef-example11111"`: Pengguna harus berasal dari kumpulan identitas tertentu`us-east-1:a1b2c3d4-5678-90ab-cdef-example11111`.
+ `"cognito-identity.amazonaws.com:amr": "authenticated"`: Pengguna harus diautentikasi. Pengguna tamu tidak dapat mengambil peran tersebut.

### Terapkan izin hak istimewa paling sedikit
<a name="identity-pools-security-best-practices-iam-least-privilege"></a>

*Saat Anda menetapkan izin dengan kebijakan IAM untuk akses terautentikasi atau akses tamu, berikan hanya izin khusus yang diperlukan untuk melakukan tugas tertentu, atau paling tidak izin hak istimewa.* Contoh kebijakan IAM berikut, bila diterapkan ke peran, memberikan akses hanya-baca ke satu file gambar di bucket Amazon S3.

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": ["arn:aws:s3:::mybucket/assets/my_picture.jpg"]
    }
  ]
}
```

------

## Praktik terbaik konfigurasi kumpulan identitas
<a name="identity-pools-security-best-practices-cib"></a>

Identity pool memiliki opsi fleksibel untuk menghasilkan AWS kredensi. Jangan mengambil pintasan desain ketika aplikasi Anda dapat bekerja dengan metode yang paling aman.

### Memahami efek dari akses tamu
<a name="identity-pools-security-best-practices-cib-guest"></a>

Akses tamu yang tidak diautentikasi memungkinkan pengguna untuk mengambil data dari Anda Akun AWS sebelum mereka masuk. Siapa pun yang mengetahui ID kumpulan identitas Anda dapat meminta kredensil yang tidak diautentikasi. ID kumpulan identitas Anda bukanlah informasi rahasia. Saat Anda mengaktifkan akses tamu, AWS izin yang Anda berikan untuk sesi yang tidak diautentikasi tersedia untuk semua orang.

Sebagai praktik terbaik, biarkan akses tamu dinonaktifkan dan ambil sumber daya yang diperlukan hanya setelah pengguna mengautentikasi. Jika aplikasi Anda memerlukan akses ke sumber daya sebelum masuk, lakukan tindakan pencegahan berikut.
+ Biasakan diri Anda dengan [batasan otomatis yang ditempatkan pada peran yang tidak diautentikasi.](iam-roles.md#access-policies-scope-down-services)
+ Pantau dan sesuaikan izin peran IAM Anda yang tidak diautentikasi agar sesuai dengan kebutuhan spesifik aplikasi Anda.
+ Berikan akses ke sumber daya tertentu.
+ Amankan kebijakan kepercayaan peran IAM default yang tidak diautentikasi.
+ Aktifkan akses tamu hanya jika Anda yakin bahwa Anda akan memberikan izin dalam peran IAM Anda kepada siapa pun di internet.

### Gunakan otentikasi yang disempurnakan secara default
<a name="identity-pools-security-best-practices-cib-enhanced"></a>

Dengan autentikasi dasar (klasik), Amazon Cognito mendelegasikan pemilihan peran IAM ke aplikasi Anda. Sebaliknya, aliran yang ditingkatkan menggunakan logika terpusat di kumpulan identitas Anda untuk menentukan peran IAM. Ini juga menyediakan keamanan tambahan untuk identitas yang tidak diautentikasi dengan [kebijakan cakupan bawah yang](iam-roles.md#access-policies-scope-down-services) menetapkan batas atas izin IAM. Aliran yang ditingkatkan adalah pilihan paling aman dengan tingkat upaya pengembang terendah. Untuk mempelajari lebih lanjut tentang opsi ini, lihat[Aliran otentikasi kumpulan identitas](authentication-flow.md).

Alur dasar dapat mengekspos logika sisi klien yang masuk ke pemilihan peran dan perakitan permintaan AWS STS API untuk kredensil. Alur yang disempurnakan menyembunyikan logika dan permintaan peran asumsi di balik otomatisasi kumpulan identitas.

Saat Anda mengonfigurasi otentikasi dasar, terapkan [praktik terbaik IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html) ke peran IAM dan izinnya.

### Gunakan penyedia pengembang dengan aman
<a name="identity-pools-security-best-practices-cib-developer"></a>

Identitas otentikasi pengembang adalah fitur kumpulan identitas untuk aplikasi sisi server. Satu-satunya bukti otentikasi yang diperlukan kumpulan identitas untuk otentikasi pengembang adalah AWS kredensil pengembang kumpulan identitas. Kumpulan identitas tidak memberlakukan batasan apa pun pada validitas pengidentifikasi penyedia pengembang yang Anda tampilkan dalam alur autentikasi ini.

Sebagai praktik terbaik, hanya menerapkan penyedia pengembang dalam kondisi berikut:
+ Untuk membuat akuntabilitas atas penggunaan kredensional yang diautentikasi pengembang, rancang nama dan pengidentifikasi penyedia pengembang Anda untuk menunjukkan sumber otentikasi. Sebagai contoh: `"Logins" : {"MyCorp provider" : "[provider application ID]"}`.
+ Hindari kredensil pengguna yang berumur panjang. [Konfigurasikan klien sisi server Anda untuk meminta identitas dengan peran terkait layanan seperti profil [instans](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-ec2_instance-profiles.html) EC2 dan peran eksekusi Lambda.](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html)
+ Hindari pencampuran sumber kepercayaan internal dan eksternal dalam kumpulan identitas yang sama. Tambahkan penyedia pengembang Anda dan penyedia sistem masuk tunggal (SSO) Anda di kumpulan identitas terpisah.

# Menggunakan atribut untuk kontrol akses
<a name="attributes-for-access-control"></a>

Atribut untuk kontrol akses adalah implementasi kumpulan identitas Amazon Cognito dari kontrol akses berbasis atribut (ABAC). Anda dapat menggunakan kebijakan IAM untuk mengontrol akses ke sumber daya AWS melalui kolam identitas Amazon Cognito berdasarkan atribut pengguna. Atribut ini dapat diambil dari penyedia identitas sosial dan perusahaan. Anda dapat memetakan atribut dalam akses penyedia dan token ID atau pernyataan SAML ke tanda yang dapat direferensikan dalam kebijakan izin IAM. 

Anda dapat memilih pemetaan default atau membuat pemetaan kustom Anda sendiri di kolam identitas Amazon Cognito. Pemetaan default memungkinkan Anda untuk menulis kebijakan IAM berdasarkan set tetap atribut pengguna. Pemetaan kustom memungkinkan Anda untuk memilih serangkaian kustom atribut pengguna yang direferensikan dalam kebijakan izin IAM. **Nama atribut** di konsol Amazon Cognito dipetakan ke **Kunci tanda untuk utama**, yang merupakan tanda yang direferensikan dalam kebijakan izin IAM.

Misalnya, katakanlah Anda memiliki layanan streaming media dengan keanggotaan gratis dan berbayar. Anda menyimpan file media di Amazon S3 dan menandai file tersebut dengan tanda gratis atau premium. Anda dapat menggunakan atribut untuk kontrol akses untuk memungkinkan akses ke konten gratis dan berbayar berdasarkan tingkat keanggotaan pengguna, yang merupakan bagian dari profil pengguna. Anda dapat memetakan atribut keanggotaan untuk kunci tanda yang utama untuk diteruskan ke kebijakan izin IAM. Dengan cara ini Anda dapat membuat kebijakan izin tunggal dan secara kondisional mengizinkan akses ke konten premium berdasarkan nilai tingkat keanggotaan dan tanda pada file konten. 

**Topics**
+ [Menggunakan atribut untuk kontrol akses dengan kolam identitas Amazon Cognito](#using-afac-with-cognito-identity-pools)
+ [Menggunakan atribut untuk contoh kebijakan kontrol akses](#using-attributes-for-access-control-policy-example)
+ [Matikan atribut untuk kontrol akses (konsol)](#disable-afac)
+ [Pemetaan penyedia default](#provider-mappings)

Menggunakan atribut untuk kontrol akses memiliki beberapa manfaat:
+ Manajemen izin lebih efisien ketika Anda menggunakan atribut untuk kontrol akses. Anda dapat membuat kebijakan izin dasar yang menggunakan atribut pengguna bukan menciptakan beberapa kebijakan untuk fungsi pekerjaan yang berbeda. 
+ Anda tidak perlu memperbarui kebijakan kapan pun Anda menambahkan atau menghapus sumber daya atau pengguna untuk aplikasi Anda. Kebijakan izin hanya akan memberikan akses ke pengguna dengan atribut pengguna yang cocok. Misalnya, Anda mungkin perlu mengontrol akses ke bucket S3 tertentu berdasarkan judul pekerjaan pengguna. Dalam hal ini, Anda dapat membuat kebijakan izin untuk mengizinkan akses ke file ini hanya untuk pengguna dalam jabatan pekerjaan yang ditentukan. Untuk informasi selengkapnya, lihat [Tutorial IAM: Menggunakan tanda sesi SAML untuk ABAC](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_abac-saml.html).
+ Atribut dapat dilewatkan sebagai tanda utama untuk kebijakan yang memungkinkan atau menolak izin berdasarkan nilai-nilai atribut tersebut.

## Menggunakan atribut untuk kontrol akses dengan kolam identitas Amazon Cognito
<a name="using-afac-with-cognito-identity-pools"></a>

Sebelum Anda dapat menggunakan atribut untuk kontrol akses, pastikan bahwa Anda memenuhi prasyarat berikut:
+ [AWS Akun](https://docs.aws.amazon.com/cognito/latest/developerguide/getting-started-with-identity-pools.html#aws-sign-up-identity-pools)
+ [Kolam pengguna](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pool-as-user-directory.html)
+ [Kolam identitas](https://docs.aws.amazon.com/cognito/latest/developerguide/getting-started-with-identity-pools.html#create-identity-pools)
+ [Menyiapkan SDK](getting-started-with-identity-pools.md#install-the-mobile-or-javascript-sdk)
+ [Penyedia identitas terintegrasi](https://docs.aws.amazon.com/cognito/latest/developerguide/getting-started-with-identity-pools.html##integrate-the-identity-providers)
+ [Kredensil](https://docs.aws.amazon.com/cognito/latest/developerguide/getting-started-with-identity-pools.html#get-credentials)

Untuk menggunakan atribut untuk kontrol akses, **Klaim** yang Anda tetapkan sebagai sumber data menetapkan nilai **Kunci Tag** yang Anda pilih. Amazon Cognito menerapkan kunci tag dan nilai ke sesi pengguna Anda. Kebijakan IAM Anda dapat mengevaluasi akses pengguna Anda dari `${aws:PrincipalTag/tagkey}` kondisi tersebut. IAM mengevaluasi nilai tag pengguna Anda terhadap kebijakan.

Anda harus menyiapkan peran IAM yang kredensialnya ingin Anda berikan kepada pengguna Anda. Kebijakan kepercayaan dari peran ini harus mengizinkan Amazon Cognito untuk mengambil peran bagi pengguna Anda. Untuk atribut kontrol akses, Anda juga harus mengizinkan Amazon Cognito menerapkan tag utama ke sesi sementara pengguna Anda. Berikan izin untuk mengambil peran dengan tindakan tersebut [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html). Berikan izin untuk menandai sesi pengguna dengan tindakan khusus [izin](https://docs.aws.amazon.com/service-authorization/latest/reference/list_awssecuritytokenservice.html#awssecuritytokenservice-actions-as-permissions). `sts:TagSession` Untuk informasi selengkapnya, lihat [Melewati tag sesi AWS Security Token Service di](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_session-tags.html) *Panduan AWS Identity and Access Management Pengguna*. Untuk contoh kebijakan kepercayaan yang memberikan `sts:AssumeRoleWithWebIdentity` dan `sts:TagSession` izin kepada prinsipal layanan `cognito-identity.amazonaws.com` Amazon Cognito, lihat. [Menggunakan atribut untuk contoh kebijakan kontrol akses](#using-attributes-for-access-control-policy-example)

**Untuk mengkonfigurasi atribut untuk kontrol akses di konsol**

1. Masuk ke [konsol Amazon Cognito](https://console.aws.amazon.com/cognito/home) dan pilih **Identity** pool. Pilih kumpulan identitas.

1. Pilih tab **Akses pengguna**.

1. Temukan **penyedia Identitas**. Pilih penyedia identitas yang ingin Anda edit. Jika Anda ingin menambahkan IDP baru, pilih **Tambahkan penyedia identitas**.

1. **Untuk mengubah tag utama yang ditetapkan Amazon Cognito saat mengeluarkan kredensil kepada pengguna yang telah diautentikasi dengan penyedia ini, pilih **Edit** di Atribut untuk kontrol akses.**

   1. Untuk tidak menerapkan tag utama, pilih **Tidak aktif**.

   1. Untuk menerapkan tag utama berdasarkan `sub` dan `aud` klaim, pilih **Gunakan pemetaan default**.

   1. Untuk membuat skema atribut kustom Anda sendiri ke tag utama, pilih **Gunakan pemetaan khusus**. Kemudian masukkan **kunci Tag** yang ingin Anda sumber dari setiap **Klaim** yang ingin Anda wakili dalam tag.

1. Pilih **Simpan perubahan**.

## Menggunakan atribut untuk contoh kebijakan kontrol akses
<a name="using-attributes-for-access-control-policy-example"></a>

Pertimbangkan skenario di mana seorang karyawan dari departemen hukum perusahaan perlu membuat daftar semua file dalam bucket milik departemen mereka dan diklasifikasikan dengan tingkat keamanan mereka. Asumsikan token bahwa karyawan ini mendapat dari penyedia identitas berisi klaim berikut. 

**Klaim**

```
            { .
              .
            "sub" : "57e7b692-4f66-480d-98b8-45a6729b4c88",
            "department" : "legal",
            "clearance" : "confidential",
             .
             .
            }
```

Atribut ini dapat dipetakan ke tanda dan direferensikan dalam kebijakan izin IAM sebagai tanda utama. Anda sekarang dapat mengelola akses dengan mengubah profil pengguna di ujung penyedia identitas. Atau, Anda dapat mengubah atribut pada sisi sumber daya dengan menggunakan nama atau tanda tanpa mengubah kebijakan itu sendiri.

Kebijakan izin berikut melakukan dua hal:
+ Mengizinkan akses daftar ke semua bucket S3 yang diakhiri dengan awalan yang cocok dengan nama departemen pengguna.
+ Mengizinkan akses baca pada file dalam bucket ini selama tanda izin pada file cocok dengan atribut izin pengguna.

**Kebijakan izin**

------
#### [ JSON ]

****  

```
   {
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "s3:List*",
            "Resource": "arn:aws:s3:::*-${aws:PrincipalTag/department}"
        },
        {
            "Effect": "Allow",
            "Action": "s3:GetObject*",
            "Resource": "arn:aws:s3:::*-${aws:PrincipalTag/department}/*",
            "Condition": {
                "StringEquals": {
                    "s3:ExistingObjectTag/clearance": "${aws:PrincipalTag/clearance}"
                }
            }
        }
    ]
}
```

------

Kebijakan kepercayaan menentukan siapa yang dapat mengambil peran ini. Kebijakan hubungan kepercayaan memungkinkan penggunaan `sts:AssumeRoleWithWebIdentity` dan `sts:TagSession` untuk mengizinkan akses. Ini menambahkan kondisi untuk membatasi kebijakan ke kumpulan identitas yang Anda buat dan memastikan bahwa itu untuk peran yang diautentikasi.

**Kebijakan kepercayaan**

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "cognito-identity.amazonaws.com"
      },
      "Action": [
        "sts:AssumeRoleWithWebIdentity",
        "sts:TagSession"
      ],
      "Condition": {
        "StringEquals": {
          "cognito-identity.amazonaws.com:aud": "IDENTITY-POOL-ID"
        },
        "ForAnyValue:StringLike": {
          "cognito-identity.amazonaws.com:amr": "authenticated"
        }
      }
    }
  ]
}
```

------

## Matikan atribut untuk kontrol akses (konsol)
<a name="disable-afac"></a>

Ikuti prosedur ini untuk menonaktifkan atribut untuk kontrol akses.

**Untuk menonaktifkan atribut untuk kontrol akses di konsol**

1. Masuk ke [konsol Amazon Cognito](https://console.aws.amazon.com/cognito/home) dan pilih **Identity** pool. Pilih kumpulan identitas.

1. Pilih tab **Akses pengguna**.

1. Temukan **penyedia Identitas**. Pilih penyedia identitas yang ingin Anda edit.

1. Pilih **Edit** di **Atribut untuk kontrol akses**.

1. Untuk tidak menerapkan tag utama, pilih **Tidak aktif**.

1. Pilih **Simpan perubahan**.

## Pemetaan penyedia default
<a name="provider-mappings"></a>

Tabel berikut memiliki informasi pemetaan default untuk penyedia autentikasi yang didukung Amazon Cognito.


| Penyedia | Jenis token | Nilai tanda utama | Contoh | 
| --- | --- | --- | --- | 
|  Kolam pengguna Amazon Cognito  |  Token ID  |  aud (ID klien) dan sub (ID pengguna)  |  “6jk8ltokc7ac9es6jrtg9q572f”, “57e7b692-4f66-480d-98b8-45a6729b4c88"   | 
|  Facebook  |  Token akses  |  aud(app\$1id), sub(user\$1id)  |  "492844718097981", "112177216992379"  | 
|  Google  |  Token ID  |  aud (ID klien) dan sub (ID pengguna)  |  "620493171733-eebk7c0hcp5lj3e1tlqp1gntt3k0rncv.apps.googleusercontent.com", "109220063452404746097"  | 
|  SAML  |  Pernyataan  |  “http://schemas.xmlsoap. org/ws/2005/05/identity/claims/nameidentifier" , "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name”   |  “auth0\$15e28d196f8f55a0eaaa95de3"," user123@gmail.com”  | 
|  Apel  |  Token ID  |  aud (ID klien) dan sub (ID pengguna)  |  "com.amazonaws.ec2-54-80-172-243.compute-1.client", "001968.a6ca34e9c1e742458a26cf8005854be9.0733"  | 
|  Amazon  |  Token akses  |  aud (ID klien di Amzn Dev Ac), user\$1id(ID pengguna)  |  “amzn1.application-oa2-client.9d70d9382d3446108aaee3dd763a0fa6", “amzn1.account. AGHNIFJQMFSBG3G6 XCPVB35 ORQAA”  | 
|  Penyedia OIDC Standar  |  ID dan token akses  |  aud (sebagai client\$1id), sub (sebagai ID pengguna)  |  "620493171733-eebk7c0hcp5lj3e1tlqp1gntt3k0rncv.apps.googleusercontent.com", "109220063452404746097"  | 
|  Twitter  |  Token akses  |  aud (ID aplikasi; aplikasi Rahasia), sub (ID pengguna)  |  “DfwifTtKEX1Fi IBRn OTl R0CFK; XGJ5xB8xir Xg W7fxMwc FvNOK9 1y5z1", “IVCPj1269003884292222976" LIdk JJr gwZkLexo  | 
|  DevAuth  |  Peta  |  Tidak berlaku  |  "tag1", "tag2"  | 

**catatan**  
Opsi pemetaan atribut default secara otomatis diisi untuk **Kunci Tanda untuk Utama** dan nama **Atribut**. Anda tidak dapat mengubah pemetaan default.

# Menggunakan kontrol akses berbasis peran
<a name="role-based-access-control"></a>

Kumpulan identitas Amazon Cognito menetapkan pengguna Anda yang diautentikasi satu set kredensil hak istimewa terbatas sementara untuk mengakses sumber daya Anda. AWS Izin untuk setiap pengguna dikendalikan melalui [IAM role](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) yang Anda buat. Anda dapat menentukan aturan untuk memilih peran bagi setiap pengguna berdasarkan klaim di token ID pengguna. Anda dapat menentukan peran default untuk pengguna terautentikasi. Anda juga dapat menentukan IAM role terpisah dengan izin terbatas untuk pengguna tamu yang tidak terauntetikasi.

## Membuat peran untuk pemetaan peran
<a name="creating-roles-for-role-mapping"></a>

Penting untuk menambahkan kebijakan kepercayaan yang tepat untuk setiap peran sehingga peran tersebut hanya dapat diasumsikan oleh Amazon Cognito untuk pengguna terautentikasi dalam kolam identitas Anda. Berikut adalah contoh kebijakan kepercayaan tersebut:

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "",
      "Effect": "Allow",
      "Principal": {
        "Federated": "cognito-identity.amazonaws.com"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "cognito-identity.amazonaws.com:aud": "us-east-1:12345678-corner-cafe-123456790ab"
        },
        "ForAnyValue:StringLike": {
          "cognito-identity.amazonaws.com:amr": "authenticated"
        }
      }
    }
  ]
}
```

------

Kebijakan ini mengizinkan pengguna gabungan dari `cognito-identity.amazonaws.com` (penerbit token OpenID Connect) untuk mengambil peran ini. Selain itu, kebijakan membatasi `aud` pada token, dalam hal ini ID kolam identitas, untuk mencocokkan kolam identitas tersebut. Terakhir, kebijakan menetapkan bahwa salah satu anggota array dari `amr` klaim multi-nilai token yang dikeluarkan oleh tindakan Amazon `GetOpenIdToken` Cognito API memiliki nilai. `authenticated`

## Memberikan izin peran masuk
<a name="granting-pass-role-permission"></a>

Untuk memungkinkan pengguna menyetel peran dengan izin melebihi izin pengguna yang ada di kumpulan identitas, beri mereka `iam:PassRole` izin untuk meneruskan peran tersebut `set-identity-pool-roles` ke API. Sebagai contoh, jika pengguna tidak dapat menulis ke Amazon S3, tetapi IAM role yang ditetapkan pengguna pada kolam identitas memberikan izin menulis ke Amazon S3, pengguna hanya dapat mengatur peran ini jika izin `iam:PassRole` diberikan untuk peran tersebut. Contoh kebijakan berikut menunjukkan cara memberikan izin `iam:PassRole`.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "Stmt1",
            "Effect": "Allow",
            "Action": [
                "iam:PassRole"
            ],
            "Resource": [
                "arn:aws:iam::123456789012:role/myS3WriteAccessRole"
            ]
        }
    ]
}
```

------

Dalam contoh kebijakan ini, izin `iam:PassRole` diberikan untuk peran `myS3WriteAccessRole`. Peran ditentukan menggunakan Amazon Resource Name (ARN) peran. Anda juga harus melampirkan kebijakan ini kepada pengguna Anda. Untuk informasi lebih lanjut, lihat [Bekerja dengan Kebijakan Terkelola](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-using.html).

**catatan**  
Fungsi Lambda menggunakan kebijakan berbasis sumber daya, dan kebijakan tersebut melekat langsung ke fungsi Lambda itu sendiri. Saat membuat aturan yang memanggil fungsi Lambda, Anda tidak lulus peran, sehingga pengguna yang membuat aturan tidak memerlukan izin `iam:PassRole`. Untuk informasi selengkapnya tentang otorisasi fungsi Lambda, lihat [Kelola Izin: Menggunakan Kebijakan Fungsi Lambda](https://docs.aws.amazon.com/lambda/latest/dg/intro-permission-model.html#intro-permission-model-access-policy).

## Menggunakan token untuk menetapkan peran kepada pengguna
<a name="using-tokens-to-assign-roles-to-users"></a>

Untuk pengguna yang masuk melalui kolam pengguna Amazon Cognito, peran dapat dilewatkan di token ID yang ditetapkan oleh kolam pengguna. Peran muncul dalam klaim berikut di token ID:
+ Klaim `cognito:preferred_role` adalah ARN peran.
+ `cognito:roles`Klaim adalah string yang dipisahkan koma yang berisi serangkaian peran yang diizinkan. ARNs

Klaim ditetapkan sebagai berikut:
+ Klaim `cognito:preferred_role` diatur untuk peran dari grup dengan nilai yang terbaik (terendah) `Precedence`. Jika hanya ada satu peran diizinkan, `cognito:preferred_role` diatur ke peran itu. Jika ada beberapa peran dan tidak ada peran tunggal yang memiliki contoh terbaik, klaim ini tidak ditetapkan.
+ Klaim `cognito:roles` ditetapkan jika ada setidaknya satu peran.

Saat menggunakan token untuk menetapkan peran, jika ada beberapa peran yang dapat ditetapkan ke pengguna, kolam identitas Amazon Cognito (identitas gabungan) memilih peran sebagai berikut:
+ Gunakan [GetCredentialsForIdentity](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_GetCredentialsForIdentity.html)`CustomRoleArn`parameter jika disetel dan cocok dengan peran dalam `cognito:roles` klaim. Jika parameter ini tidak cocok dengan peran di`cognito:roles`, tolak akses.
+ Jika klaim `cognito:preferred_role` ditetapkan, gunakan klaim tersebut.
+ Jika `cognito:preferred_role` klaim tidak disetel, `cognito:roles` klaim disetel, dan tidak `CustomRoleArn` ditentukan dalam panggilan ke`GetCredentialsForIdentity`, maka pengaturan **Resolusi peran** di konsol atau `AmbiguousRoleResolution` bidang (dalam `RoleMappings` parameter [SetIdentityPoolRoles](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_SetIdentityPoolRoles.html)API) digunakan untuk menentukan peran yang akan ditetapkan.

## Menggunakan pemetaan berbasis aturan untuk menetapkan peran kepada pengguna
<a name="using-rules-to-assign-roles-to-users"></a>

Aturan memungkinkan Anda memetakan klaim dari token penyedia identitas ke IAM role.

Setiap aturan menentukan klaim token (seperti atribut pengguna di token ID dari kolam pengguna Amazon Cognito), jenis kecocokan, nilai, dan IAM role. Jenis pertandingan dapat `Equals`, `NotEqual`, `StartsWith`, atau `Contains`. Jika pengguna memiliki nilai yang cocok untuk klaim, pengguna dapat mengambil peran itu ketika mendapatkan kredensialnya. Misalnya, Anda dapat membuat aturan yang menetapkan IAM role tertentu untuk pengguna dengan nilai atribut kustom `custom:dept` dari `Sales`. 

**catatan**  
Dalam setelan aturan, atribut khusus memerlukan prefiks `custom:` untuk membedakannya dari atribut standar.

Aturan dievaluasi secara berurutan, dan IAM role untuk aturan pencocokan pertama digunakan, kecuali `CustomRoleArn` ditentukan untuk mengesampingkan urutan tersebut. Untuk informasi selengkapnya tentang atribut pengguna di kolam pengguna Amazon Cognito, lihat [Bekerja dengan atribut pengguna](user-pool-settings-attributes.md).

Anda dapat menetapkan beberapa aturan untuk penyedia autentikasi di konsol kolam identitas (identitas gabungan). Aturan diterapkan secara berurutan. Anda dapat menyeret aturan untuk mengubah urutannya. Aturan pencocokan pertama diutamakan. Jika jenis kecocokan adalah `NotEqual` dan klaim tidak ada, aturan tidak dievaluasi. Jika tidak ada aturan yang cocok, **setelan resolusi Peran** diterapkan ke salah satu **Gunakan peran default yang diautentikasi** atau **permintaan Tolak**.

Di API dan CLI, Anda dapat menentukan peran yang akan ditetapkan ketika tidak ada aturan yang cocok di `AmbiguousRoleResolution` bidang [RoleMapping](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_RoleMapping.html)tipe, yang ditentukan dalam `RoleMappings` parameter API. [SetIdentityPoolRoles](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_SetIdentityPoolRoles.html)

**Untuk menambahkan pemetaan berbasis aturan ke penyedia identitas di konsol Amazon Cognito, tambahkan atau perbarui iDP dan pilih **Pilih** peran dengan aturan di bawah Pemilihan peran.** Dari sana, Anda dapat menambahkan aturan yang diklaim penyedia peta ke peran IAM.

Anda dapat mengatur pemetaan berbasis aturan untuk penyedia identitas di AWS CLI atau API dengan `RulesConfiguration` bidang jenisnya. [RoleMapping](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_RoleMapping.html) Anda dapat menentukan bidang ini dalam `RoleMappings` parameter [SetIdentityPoolRoles](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_SetIdentityPoolRoles.html)API.

Misalnya, AWS CLI perintah berikut menambahkan aturan yang menetapkan peran `arn:aws:iam::123456789012:role/Sacramento_team_S3_admin` kepada pengguna di lokasi Sacramento Anda yang diautentikasi oleh OIDC iDP: `arn:aws:iam::123456789012:oidc-provider/myOIDCIdP`

```
aws cognito-identity set-identity-pool-roles --region us-east-1 --cli-input-json file://role-mapping.json
```

**Isi dari `role-mapping.json`**:

```
{
    "IdentityPoolId": "us-east-1:12345678-corner-cafe-123456790ab",
    "Roles": {
        "authenticated": "arn:aws:iam::123456789012:role/myS3WriteAccessRole",
        "unauthenticated": "arn:aws:iam::123456789012:role/myS3ReadAccessRole"
    },
    "RoleMappings": {
        "arn:aws:iam::123456789012:oidc-provider/myOIDCIdP": {
            "Type": "Rules",
            "AmbiguousRoleResolution": "AuthenticatedRole",
            "RulesConfiguration": {
                "Rules": [
                    {
                        "Claim": "locale",
                        "MatchType": "Equals",
                        "Value": "Sacramento",
                        "RoleARN": "arn:aws:iam::123456789012:role/Sacramento_team_S3_admin"
                    }
                ]
            }
        }
    }
}
```

Untuk setiap kumpulan pengguna atau penyedia otentikasi lain yang Anda konfigurasikan untuk kumpulan identitas, Anda dapat membuat hingga 25 aturan. Batas ini tidak dapat disesuaikan. Untuk informasi selengkapnya, lihat [Kuota di Amazon Cognito](https://docs.aws.amazon.com/cognito/latest/developerguide/limits.html).

## Token mengklaim untuk digunakan dalam pemetaan berbasis aturan
<a name="token-claims-for-role-based-access-control"></a>

**Amazon Cognito**

Sebuah token ID Amazon Cognito direpresentasikan sebagai JSON Web Token (JWT). Token berisi klaim tentang identitas pengguna yang terautentikasi, seperti `name`, `family_name`, dan `phone_number`. Untuk informasi selengkapnya tentang klaim standar, lihat [Spesifikasi OpenID Connect](http://openid.net/specs/openid-connect-core-1_0.html#StandardClaims). Terlepas dari klaim standar, berikut ini adalah klaim tambahan khusus untuk Amazon Cognito:
+ `cognito:groups`
+ `cognito:roles`
+ `cognito:preferred_role`

**Amazon**

Klaim berikut, bersama dengan nilai yang mungkin untuk klaim tersebut, dapat digunakan dengan Login with Amazon:
+ `iss`: www.amazon.com
+ `aud`: Identitas Aplikasi
+ `sub`:`sub` dari token Login with Amazon

**Facebook**

Klaim berikut, bersama dengan nilai yang mungkin untuk klaim tersebut, dapat digunakan dengan Facebook:
+ `iss`: graph.facebook.com
+ `aud`: Identitas Aplikasi
+ `sub`: `sub` dari token Facebook

**Google**

Token Google berisi klaim standar dari [Spesifikasi OpenID Connect](http://openid.net/specs/openid-connect-core-1_0.html#StandardClaims). Semua klaim dalam token OpenID tersedia untuk pemetaan berbasis aturan. Lihat situs [OpenID Connect](https://developers.google.com/identity/protocols/OpenIDConnect) Google untuk mempelajari klaim yang tersedia dari token Google.

**Apel**

Token Apple berisi klaim standar dari [Spesifikasi OpenID Connect](http://openid.net/specs/openid-connect-core-1_0.html#StandardClaims). Lihat [Mengautentikasi Pengguna dengan Masuk melalui Apple](https://developer.apple.com/documentation/signinwithapple/authenticating-users-with-sign-in-with-apple) dalam dokumentasi Apple untuk belajar lebih lanjut tentang klaim yang tersedia dari token Apple. Token Apple tidak selalu berisi `email`.

**OpenID**

Semua klaim dalam token Id Terbuka tersedia untuk pemetaan berbasis aturan. Untuk informasi selengkapnya tentang klaim standar, lihat [Spesifikasi OpenID Connect](http://openid.net/specs/openid-connect-core-1_0.html#StandardClaims). Lihat dokumentasi penyedia OpenID Anda untuk mempelajari klaim tambahan yang tersedia.

**SAM**

Klaim diuraikan dari pernyataan SAML yang diterima. Semua klaim yang tersedia dalam pernyataan SAML dapat digunakan dalam pemetaan berbasis aturan.

## Praktik terbaik untuk kontrol akses berbasis peran
<a name="best-practices-for-role-based-access-control"></a>

**penting**  
Jika klaim bahwa Anda memetakan ke peran dapat diubah oleh pengguna akhir, setiap pengguna akhir dapat mengambil peran Anda dan menetapkan kebijakan yang sesuai. Hanya klaim peta yang tidak dapat secara langsung ditetapkan oleh pengguna akhir ke peran dengan izin yang ditinggikan. Di kolam pengguna Amazon Cognito, Anda dapat mengatur izin baca dan tulis per aplikasi untuk setiap atribut pengguna.

**penting**  
Jika Anda menetapkan peran untuk grup di kolam pengguna Amazon Cognito, peran tersebut akan dilewatkan melalui token ID pengguna. Untuk menggunakan peran ini, Anda juga harus mengatur **Pilih peran dari token** untuk pemilihan peran terautentikasi untuk kolam identitas.  
Anda dapat menggunakan pengaturan **Resolusi peran** di konsol dan `RoleMappings` parameter [SetIdentityPoolRoles](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_SetIdentityPoolRoles.html)API untuk menentukan perilaku default ketika peran yang benar tidak dapat ditentukan dari token.

# Mendapatkan kredensil
<a name="getting-credentials"></a>

Anda dapat menggunakan Amazon Cognito untuk mengirimkan kredensil hak istimewa terbatas sementara ke aplikasi Anda, sehingga pengguna dapat mengakses sumber daya. AWS Bagian ini menjelaskan cara mendapatkan kredensial dan bagaimana cara mengambil identitas Amazon Cognito dari kolam identitas.

Amazon Cognito mendukung identitas baik yang terautentikasi maupun yang tidak terautentikasi. Pengguna yang tidak diautentikasi tidak meminta agar identitas mereka diverifikasi, sehingga peran ini sesuai untuk pengguna tamu aplikasi Anda atau jika pengguna meminta agar identitas mereka diverifikasi dan itu tidak dipermasalahkan. Pengguna yang diautentikasi masuk ke aplikasi Anda melalui penyedia identitas pihak ketiga, atau kolam pengguna, yang memverifikasi identitas mereka. Pastikan Anda menjangkau izin sumber daya dengan tepat sehingga Anda tidak memberikan akses kepada mereka dari pengguna yang tidak terautentikasi.

Identitas Amazon Cognito identitas bukan kredensial. Mereka ditukar dengan kredensil menggunakan dukungan federasi identitas web di (). AWS Security Token Service AWS STS Cara yang disarankan untuk mendapatkan kredensial AWS untuk pengguna aplikasi Anda adalah dengan menggunakan `AWS.CognitoIdentityCredentials`. Identitas dalam objek kredensial kemudian ditukar dengan kredensil menggunakan. AWS STS

**catatan**  
Jika Anda membuat kumpulan identitas sebelum Februari 2015, Anda harus mengasosiasikan kembali peran Anda dengan kumpulan identitas Anda untuk menggunakan `AWS.CognitoIdentityCredentials` konstruktor tanpa peran sebagai parameter. Untuk melakukannya, buka [konsol Amazon Cognito](https://console.aws.amazon.com/cognito/home), pilih **Kelola kumpulan identitas, pilih kumpulan identitas** Anda, pilih **Edit** Kumpulan identitas, tentukan peran yang diautentikasi dan tidak diautentikasi, dan simpan perubahan. 

Penyedia kredensi identitas web adalah bagian dari rantai penyedia kredensi default di. AWS SDKs Untuk mengatur token kumpulan identitas Anda dalam `config` file lokal untuk AWS SDK atau file AWS CLI, tambahkan entri `web_identity_token_file` profil. Lihat [Mengasumsikan penyedia kredensi peran](https://docs.aws.amazon.com/sdkref/latest/guide/feature-assume-role-credentials.html) di Panduan Referensi Alat AWS SDKs dan.

Untuk mempelajari lebih lanjut tentang cara mengisi kredensil identitas web di SDK Anda, lihat panduan pengembang SDK. Untuk hasil terbaik, mulailah proyek Anda dengan integrasi kumpulan identitas yang ada di dalamnya AWS Amplify.

**AWS Sumber daya SDK untuk mendapatkan dan menyetel kredensional dengan kumpulan identitas**
+ [Federasi Kolam Identitas](https://docs.amplify.aws/lib/auth/advanced/q/platform/android/#identity-pool-federation) (Android) di Amplify Dev Center
+ [Federasi Kolam Identitas](https://docs.amplify.aws/lib/auth/advanced/q/platform/ios/#identity-pool-federation) (iOS) di Amplify Dev Center
+ [Menggunakan Identitas Amazon Cognito untuk mengautentikasi pengguna di Panduan Pengembang](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/loading-browser-credentials-cognito.html) AWS SDK untuk JavaScript 
+ [Penyedia kredensi Amazon Cognito](https://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/cognito-creds-provider.html) di Panduan Pengembang AWS SDK untuk .NET 
+ [Tentukan Kredensil Secara Terprogram di Panduan Pengembang](https://aws.github.io/aws-sdk-go-v2/docs/configuring-sdk/#specify-credentials-programmatically) AWS SDK untuk Go 
+ [Menyediakan kredensi sementara dalam kode di](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/credentials-explicit.html) Panduan Pengembang AWS SDK for Java 2.x 
+ [assumeRoleWithWebIdentityCredentialProvider](https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/guide_credentials_provider.html#assume-role-with-web-identity-provider)penyedia di Panduan AWS SDK untuk PHP Pengembang
+ [Asumsikan Peran Dengan Penyedia Identitas Web](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/credentials.html#assume-role-with-web-identity-provider) dalam AWS SDK untuk Python (Boto3) dokumentasi
+ [Menentukan kredensi dan wilayah default Anda](https://docs.aws.amazon.com/sdk-for-rust/latest/dg/credentials.html) di Panduan Pengembang AWS SDK for Rust 

Bagian berikut memberikan contoh kode dalam beberapa warisan. AWS SDKs

## Android
<a name="getting-credentials-1.android"></a>

Anda dapat menggunakan Amazon Cognito untuk mengirimkan kredensil hak istimewa terbatas sementara ke aplikasi Anda, sehingga pengguna dapat mengakses sumber daya. AWS Amazon Cognito mendukung identitas baik yang terautentikasi maupun yang tidak terautentikasi. Untuk memberikan AWS kredensi ke aplikasi Anda, ikuti langkah-langkah di bawah ini.

Untuk menggunakan kumpulan identitas Amazon Cognito di aplikasi Android, siapkan. AWS Amplify Untuk informasi selengkapnya, lihat [Otentikasi](https://docs.amplify.aws/lib/auth/getting-started/q/platform/android/) di *Amplify Dev Center*.

**Mengambil identitas Amazon Cognito**

Jika Anda mengizinkan pengguna yang tidak diautentikasi, Anda dapat segera mengambil pengidentifikasi Amazon Cognito (ID identitas) unik untuk pengguna akhir Anda. Jika Anda mengautentikasi pengguna, Anda dapat mengambil ID identitas setelah menyetel token masuk di penyedia kredensial:

```
String identityId = credentialsProvider.getIdentityId();
Log.d("LogTag", "my ID is " + identityId);
```

**catatan**  
 Jangan panggil `getIdentityId()`, `refresh()`, atau `getCredentials()` di thread utama aplikasi Anda. Mulai Android 3.0 (API Level 11), aplikasi Anda akan secara otomatis gagal dan melempar file [NetworkOnMainThreadException](https://developer.android.com/reference/android/os/NetworkOnMainThreadException.html)jika Anda menjalankan jaringan I/O di thread aplikasi utama. Anda harus memindahkan kode Anda ke thread latar belakang menggunakan`AsyncTask`. Untuk informasi lebih lanjut, lihat [dokumentasi Android](https://developer.android.com/training/basics/network-ops/connecting.html#AsyncTask). Anda juga dapat memanggil `getCachedIdentityId()` untuk menarik ID, tetapi hanya jika hal tersebut sudah di-cache secara lokal. Jika tidak, metode ini akan memberikan nilai null. 

## iOS - Objective-C
<a name="getting-credentials-1.ios-objc"></a>

Anda dapat menggunakan Amazon Cognito untuk mengirimkan kredensil hak istimewa terbatas sementara ke aplikasi Anda, sehingga pengguna dapat mengakses sumber daya. AWS Kolam identitas Amazon Cognito mendukung identitas terautetikasi dan tidak terautentikasi. Untuk memberikan AWS kredensi ke aplikasi Anda, selesaikan langkah-langkah berikut. 

Untuk menggunakan kumpulan identitas Amazon Cognito di aplikasi iOS, siapkan. AWS Amplify*Untuk informasi selengkapnya, lihat Otentikasi [Swift dan Otentikasi](https://docs.amplify.aws/lib/auth/getting-started/q/platform/ios/) [Flutter di](https://docs.amplify.aws/lib/auth/getting-started/q/platform/flutter/) Amplify Dev Center.*

**Mengambil identitas Amazon Cognito**

Anda dapat segera menarik pengidentifikasi Amazon Cognito unik (ID identitas) untuk pengguna akhir Anda jika Anda mengizinkan pengguna yang tidak diautentikasi atau setelah Anda menyetel token login di penyedia kredensial jika Anda mengautentikasi pengguna:

```
// Retrieve your Amazon Cognito ID
[[credentialsProvider getIdentityId] continueWithBlock:^id(AWSTask *task) {
    if (task.error) {
        NSLog(@"Error: %@", task.error);
    }
    else {
        // the task result will contain the identity id
        NSString *cognitoId = task.result;
    }
    return nil;
}];
```

**catatan**  
 `getIdentityId` adalah panggilan asinkron. Jika ID identitas telah diatur pada penyedia layanan Anda, Anda dapat menghubungi `credentialsProvider.identityId` untuk menarik identitas itu, yang di-cache secara di lokasi tersebut. Namun, jika ID identitas tidak diatur pada penyedia Anda, memanggil `credentialsProvider.identityId` akan menampilkan `nil`. Untuk informasi selengkapnya, lihat referensi [Amplify iOS SDK](https://github.com/aws-amplify/aws-sdk-ios). 

## iOS - Swift
<a name="getting-credentials-1.ios-swift"></a>

Anda dapat menggunakan Amazon Cognito untuk mengirimkan kredensil hak istimewa terbatas sementara ke aplikasi Anda sehingga pengguna dapat mengakses sumber daya. AWS Amazon Cognito mendukung identitas baik yang terautentikasi maupun yang tidak terautentikasi. Untuk memberikan AWS kredensi ke aplikasi Anda, ikuti langkah-langkah di bawah ini. 

Untuk menggunakan kumpulan identitas Amazon Cognito di aplikasi iOS, siapkan. AWS Amplify Untuk informasi selengkapnya, lihat [Otentikasi Swift](https://docs.amplify.aws/lib/auth/getting-started/q/platform/ios/) di *Amplify* Dev Center.

**Mengambil identitas Amazon Cognito**

Anda dapat segera menarik pengidentifikasi Amazon Cognito unik (ID identitas) untuk pengguna akhir Anda jika Anda mengizinkan pengguna yang tidak diautentikasi atau setelah Anda menyetel token login di penyedia kredensial jika Anda mengautentikasi pengguna:

```
// Retrieve your Amazon Cognito ID
credentialsProvider.getIdentityId().continueWith(block: { (task) -> AnyObject? in
    if (task.error != nil) {
        print("Error: " + task.error!.localizedDescription)
    }
    else {
        // the task result will contain the identity id
        let cognitoId = task.result!
        print("Cognito id: \(cognitoId)")
    }
    return task;
})
```

**catatan**  
 `getIdentityId` adalah panggilan asinkron. Jika ID identitas telah diatur pada penyedia layanan Anda, Anda dapat menghubungi `credentialsProvider.identityId` untuk menarik identitas itu, yang di-cache secara di lokasi tersebut. Namun, jika ID identitas tidak diatur pada penyedia Anda, memanggil `credentialsProvider.identityId` akan menampilkan `nil`. Untuk informasi selengkapnya, lihat referensi [Amplify iOS SDK](https://github.com/aws-amplify/aws-sdk-ios). 

## JavaScript
<a name="getting-credentials-1.javascript"></a>

Jika Anda belum membuatnya, buat kolam identitas di [Konsol Amazon Cognito](https://console.aws.amazon.com/cognito) sebelum menggunakan `AWS.CognitoIdentityCredentials`.

Setelah mengkonfigurasi kolam identitas dengan penyedia identitas, Anda dapat menggunakan `AWS.CognitoIdentityCredentials` untuk mengautentikasi pengguna. Untuk mengkonfigurasi kredensial aplikasi Anda agar dapat menggunakan `AWS.CognitoIdentityCredentials`, atur properti `credentials` baik `AWS.Config` atau konfigurasi per layanan. Contoh berikut menggunakan `AWS.Config`: 

```
// Set the region where your identity pool exists (us-east-1, eu-west-1)
AWS.config.region = 'us-east-1';

// Configure the credentials provider to use your identity pool
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
    IdentityPoolId: 'IDENTITY_POOL_ID',
    Logins: { // optional tokens, used for authenticated login
        'graph.facebook.com': 'FBTOKEN',
        'www.amazon.com': 'AMAZONTOKEN',
        'accounts.google.com': 'GOOGLETOKEN',
        'appleid.apple.com': 'APPLETOKEN'
    }
});

// Make the call to obtain credentials
AWS.config.credentials.get(function(){

    // Credentials will be available when this function is called.
    var accessKeyId = AWS.config.credentials.accessKeyId;
    var secretAccessKey = AWS.config.credentials.secretAccessKey;
    var sessionToken = AWS.config.credentials.sessionToken;

});
```

Properti opsional `Logins` adalah peta nama penyedia identitas untuk token identitas bagi penyedia tersebut. Bagaimana Anda bisa mendapatkan token dari penyedia identitas Anda tergantung pada penyedia yang Anda gunakan. Misalnya, jika Facebook adalah salah satu penyedia identitas Anda, Anda dapat menggunakan fungsi `FB.login` dari [SDK Facebook](https://developers.facebook.com/docs/facebook-login/web) untuk mendapatkan token penyedia identitas: 

```
FB.login(function (response) {
    if (response.authResponse) { // logged in
        AWS.config.credentials = new AWS.CognitoIdentityCredentials({
          IdentityPoolId: 'us-east-1:1699ebc0-7900-4099-b910-2df94f52a030',
          Logins: {
            'graph.facebook.com': response.authResponse.accessToken
          }
        });

        console.log('You are now logged in.');
    } else {
        console.log('There was a problem logging you in.');
    }
});
```

**Mengambil identitas Amazon Cognito**

Anda dapat segera menarik pengidentifikasi Amazon Cognito unik (ID identitas) untuk pengguna akhir Anda jika Anda mengizinkan pengguna yang tidak diautentikasi atau setelah Anda menyetel token login di penyedia kredensial jika Anda mengautentikasi pengguna:

```
var identityId = AWS.config.credentials.identityId;
```

## Unity
<a name="getting-credentials-1.unity"></a>

 Anda dapat menggunakan Amazon Cognito untuk mengirimkan kredensil hak istimewa terbatas sementara ke aplikasi Anda, sehingga pengguna dapat mengakses sumber daya. AWS Amazon Cognito mendukung identitas baik yang terautentikasi maupun yang tidak terautentikasi. Untuk memberikan AWS kredensi ke aplikasi Anda, ikuti langkah-langkah di bawah ini. 

[AWS SDK for](https://docs.aws.amazon.com/mobile/sdkforunity/developerguide/what-is-unity-plugin.html) Unity sekarang menjadi bagian dari. [SDK untuk .NET](https://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/welcome.html) Untuk memulai dengan Amazon Cognito di SDK untuk .NET, lihat Penyedia [kredensi Amazon Cognito](https://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/cognito-creds-provider.html) di Panduan Pengembang. AWS SDK untuk .NET Atau lihat [Amplify Dev Center](https://docs.amplify.aws/) untuk opsi pembuatan aplikasi. AWS Amplify

**Mengambil identitas Amazon Cognito**

 Anda dapat segera menarik pengidentifikasi Amazon Cognito unik (ID identitas) untuk pengguna akhir Anda jika Anda mengizinkan pengguna yang tidak diautentikasi atau setelah Anda menyetel token login di penyedia kredensial jika Anda mengautentikasi pengguna: 

```
credentials.GetIdentityIdAsync(delegate(AmazonCognitoIdentityResult<string> result) {
    if (result.Exception != null) {
        //Exception!
    }
    string identityId = result.Response;
});
```

## Xamarin
<a name="getting-credentials-1.xamarin"></a>

Anda dapat menggunakan Amazon Cognito untuk mengirimkan kredensil hak istimewa terbatas sementara ke aplikasi Anda sehingga pengguna dapat mengakses sumber daya. AWS Amazon Cognito mendukung identitas baik yang terautentikasi maupun yang tidak terautentikasi. Untuk memberikan AWS kredensi ke aplikasi Anda, ikuti langkah-langkah di bawah ini.

[AWS SDK untuk Xamarin](https://docs.aws.amazon.com/mobile/sdkforxamarin/developerguide/Welcome.html) sekarang menjadi bagian dari. [SDK untuk .NET](https://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/welcome.html) Untuk memulai dengan Amazon Cognito di SDK untuk .NET, lihat Penyedia [kredensi Amazon Cognito](https://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/cognito-creds-provider.html) di Panduan Pengembang. AWS SDK untuk .NET Atau lihat [Amplify Dev Center](https://docs.amplify.aws/) untuk opsi pembuatan aplikasi. AWS Amplify

**catatan**  
 **Catatan:** Jika Anda membuat kumpulan identitas sebelum Februari 2015, Anda harus mengasosiasikan kembali peran Anda dengan kumpulan identitas Anda untuk menggunakan konstruktor ini tanpa peran sebagai parameter. Untuk melakukannya, buka [konsol Amazon Cognito](https://console.aws.amazon.com/cognito/home), pilih **Kelola kumpulan identitas, pilih kumpulan identitas** Anda, pilih **Edit** Kumpulan identitas, tentukan peran yang diautentikasi dan tidak diautentikasi, dan simpan perubahan. 

**Mengambil identitas Amazon Cognito**

 Anda dapat segera menarik pengidentifikasi Amazon Cognito unik (ID identitas) untuk pengguna akhir Anda jika Anda mengizinkan pengguna yang tidak diautentikasi atau setelah Anda menyetel token login di penyedia kredensial jika Anda mengautentikasi pengguna: 

```
var identityId = await credentials.GetIdentityIdAsync();
```

# Mengakses Layanan AWS dengan kredensi sementara
<a name="accessing-aws-services"></a>

Hasil otentikasi yang berhasil dengan kumpulan identitas adalah seperangkat AWS kredensil. Dengan kredensi ini, aplikasi Anda dapat membuat permintaan ke AWS sumber daya yang dilindungi dengan otentikasi IAM. Dengan berbagai AWS SDKs yang dapat Anda tambahkan ke aplikasi Anda untuk mengakses operasi API kumpulan identitas, Anda dapat membuat permintaan API yang tidak diautentikasi yang menghasilkan kredensil sementara. Kemudian Anda dapat menambahkan SDKs yang lain Layanan AWS ke klien Anda dan menandatangani permintaan dengan kredensi sementara tersebut. Izin IAM yang diberikan untuk peran kredensial-sementara Anda harus mengizinkan operasi yang Anda minta dari layanan lain.

Setelah mengonfigurasi penyedia kredensi Amazon Cognito dan mengambil AWS kredensional, buat klien. Layanan AWS Berikut ini adalah beberapa contoh dari dokumentasi AWS SDK.

**AWS Sumber daya SDK untuk membuat klien**
+ [AWS Konfigurasi klien](https://docs.aws.amazon.com/sdk-for-cpp/v1/developer-guide/client-config.html) di Panduan AWS SDK untuk C\$1\$1 Pengembang
+ [Menggunakan AWS SDK untuk Go V2 dengan Layanan AWS](https://aws.github.io/aws-sdk-go-v2/docs/making-requests/) di Panduan AWS SDK untuk Go Pengembang
+ [Mengkonfigurasi klien HTTP](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/http-configuration.html) di Panduan AWS SDK for Java 2.x Pengembang
+ [Membuat dan memanggil objek layanan](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/creating-and-calling-service-objects.html) di Panduan AWS SDK untuk JavaScript Pengembang
+ [Membuat klien](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/clients.html#creating-clients) dalam AWS SDK untuk Python (Boto3) dokumentasi
+ [Membuat klien layanan](https://docs.aws.amazon.com/sdk-for-rust/latest/dg/client.html) di Panduan AWS SDK for Rust Pengembang
+ [Menggunakan klien](https://docs.aws.amazon.com/sdk-for-swift/latest/developer-guide/using-client-services.html) di Panduan AWS SDK for Swift Pengembang

Cuplikan berikut menginisialisasi klien Amazon DynamoDB: 

## Android
<a name="accessing-aws-services-1.android"></a>

Untuk menggunakan kumpulan identitas Amazon Cognito di aplikasi Android, siapkan. AWS Amplify Untuk informasi selengkapnya, lihat [Otentikasi](https://docs.amplify.aws/lib/auth/getting-started/q/platform/android/) di *Amplify Dev Center*.

```
// Create a service client with the provider
AmazonDynamoDB client = new AmazonDynamoDBClient(credentialsProvider);
```

 Penyedia kredensi berkomunikasi dengan Amazon Cognito, mengambil pengenal unik untuk pengguna yang diautentikasi dan tidak diautentikasi serta kredensil hak istimewa sementara dan terbatas untuk SDK Seluler. AWS AWS Kredensial yang ditarik berlaku selama satu jam, dan penyedia menyegarkannya ketika kedaluwarsa. 

## iOS - Objective-C
<a name="accessing-aws-services-1.ios-objc"></a>

Untuk menggunakan kumpulan identitas Amazon Cognito di aplikasi iOS, siapkan. AWS Amplify*Untuk informasi selengkapnya, lihat Otentikasi [Swift dan Otentikasi](https://docs.amplify.aws/lib/auth/getting-started/q/platform/ios/) [Flutter di](https://docs.amplify.aws/lib/auth/getting-started/q/platform/flutter/) Amplify Dev Center.*

```
// create a configuration that uses the provider
AWSServiceConfiguration *configuration = [AWSServiceConfiguration configurationWithRegion:AWSRegionUSEast1 provider:credentialsProvider];
// get a client with the default service configuration
AWSDynamoDB *dynamoDB = [AWSDynamoDB defaultDynamoDB];
```

 Penyedia kredensi berkomunikasi dengan Amazon Cognito, mengambil pengenal unik untuk pengguna yang diautentikasi dan tidak diautentikasi serta kredensil hak istimewa sementara dan terbatas untuk SDK Seluler. AWS AWS Kredensial yang ditarik berlaku selama satu jam, dan penyedia menyegarkannya ketika kedaluwarsa. 

## iOS - Swift
<a name="accessing-aws-services-1.ios-swift"></a>

Untuk menggunakan kumpulan identitas Amazon Cognito di aplikasi iOS, siapkan. AWS Amplify Untuk informasi selengkapnya, lihat [Otentikasi Swift](https://docs.amplify.aws/lib/auth/getting-started/q/platform/ios/) di *Amplify* Dev Center.

```
// get a client with the default service configuration
let dynamoDB = AWSDynamoDB.default()

// get a client with a custom configuration
AWSDynamoDB.register(with: configuration!, forKey: "USWest2DynamoDB");
let dynamoDBCustom = AWSDynamoDB(forKey: "USWest2DynamoDB")
```

Penyedia kredensi berkomunikasi dengan Amazon Cognito, mengambil pengenal unik untuk pengguna yang diautentikasi dan tidak diautentikasi serta kredensil hak istimewa sementara dan terbatas untuk SDK Seluler. AWS AWS Kredensial yang ditarik berlaku selama satu jam, dan penyedia menyegarkannya ketika kedaluwarsa. 

## JavaScript
<a name="accessing-aws-services-1.javascript"></a>



```
// Create a service client with the provider
var dynamodb = new AWS.DynamoDB({region: 'us-west-2'});
```

 Penyedia kredensi berkomunikasi dengan Amazon Cognito, mengambil pengenal unik untuk pengguna yang diautentikasi dan tidak diautentikasi serta kredenal hak istimewa terbatas sementara untuk SDK Seluler. AWS AWS Kredensial yang ditarik berlaku selama satu jam, dan penyedia menyegarkannya ketika kedaluwarsa. 

## Unity
<a name="accessing-aws-services-1.unity"></a>

[AWS SDK for](https://docs.aws.amazon.com/mobile/sdkforunity/developerguide/what-is-unity-plugin.html) Unity sekarang menjadi bagian dari. [SDK untuk .NET](https://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/welcome.html) Untuk memulai dengan Amazon Cognito di SDK untuk .NET, lihat Penyedia [kredensi Amazon Cognito](https://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/cognito-creds-provider.html) di Panduan Pengembang. AWS SDK untuk .NET Atau lihat [Amplify Dev Center](https://docs.amplify.aws/) untuk opsi pembuatan aplikasi. AWS Amplify

```
// create a service client that uses credentials provided by Cognito
AmazonDynamoDBClient client = new AmazonDynamoDBClient(credentials, REGION);
```

 Penyedia kredensi berkomunikasi dengan Amazon Cognito, mengambil pengenal unik untuk pengguna yang diautentikasi dan tidak diautentikasi serta kredenal hak istimewa terbatas sementara untuk SDK Seluler. AWS AWS Kredensial yang ditarik berlaku selama satu jam, dan penyedia menyegarkannya ketika kedaluwarsa. 

## Xamarin
<a name="accessing-aws-services-1.xamarin"></a>

[AWS SDK untuk Xamarin](https://docs.aws.amazon.com/mobile/sdkforxamarin/developerguide/Welcome.html) sekarang menjadi bagian dari. [SDK untuk .NET](https://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/welcome.html) Untuk memulai dengan Amazon Cognito di SDK untuk .NET, lihat Penyedia [kredensi Amazon Cognito](https://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/cognito-creds-provider.html) di Panduan Pengembang. AWS SDK untuk .NET Atau lihat [Amplify Dev Center](https://docs.amplify.aws/) untuk opsi pembuatan aplikasi. AWS Amplify

```
// create a service client that uses credentials provided by Cognito
var client = new AmazonDynamoDBClient(credentials, REGION)
```

 Penyedia kredensi berkomunikasi dengan Amazon Cognito, mengambil pengenal unik untuk pengguna yang diautentikasi dan tidak diautentikasi serta kredenal hak istimewa terbatas sementara untuk SDK Seluler. AWS AWS Kredensial yang ditarik berlaku selama satu jam, dan penyedia menyegarkannya ketika kedaluwarsa. 

# Identity pool penyedia identitas pihak ketiga
<a name="external-identity-providers"></a>

Dengan kumpulan identitas Amazon Cognito, Anda dapat berintegrasi dengan berbagai penyedia identitas eksternal (IdPs) untuk memberikan AWS kredensi sementara melalui otentikasi federasi dalam aplikasi Anda. Dengan mengonfigurasi kumpulan identitas agar berfungsi dengan eksternal ini IdPs, Anda dapat mengotorisasi akses ke AWS sumber daya back-end untuk pengguna Anda dengan autentikasi oleh kumpulan pengguna Amazon Cognito, penyedia sosial, penyedia OIDC, atau penyedia SAMP. Bagian ini mencakup langkah-langkah untuk mengatur dan mengintegrasikan IdPs dengan kumpulan identitas Amazon Cognito Anda.

Menggunakan `logins` properti, Anda dapat mengatur kredensional yang diterima dari penyedia identitas (iDP). Anda juga dapat mengaitkan kumpulan identitas dengan beberapa IdPs. Misalnya, Anda dapat mengatur token Facebook dan Google di `logins` properti untuk mengaitkan identitas Amazon Cognito yang unik dengan kedua login iDP. Pengguna dapat mengautentikasi dengan salah satu akun, tetapi Amazon Cognito mengembalikan pengenal pengguna yang sama.

Petunjuk berikut memandu Anda melalui otentikasi dengan dukungan kumpulan IdPs identitas Amazon Cognito.

**Topics**
+ [Menyiapkan Facebook sebagai kumpulan identitas IDP](facebook.md)
+ [Menyiapkan Login with Amazon sebagai kumpulan identitas IDP](amazon.md)
+ [Menyiapkan Google sebagai kumpulan identitas iDP](google.md)
+ [Menyiapkan Masuk dengan Apple sebagai kumpulan identitas iDP](apple.md)
+ [Menyiapkan penyedia OIDC sebagai idP kumpulan identitas](open-id.md)
+ [Menyiapkan penyedia SAMP sebagai idP kumpulan identitas](saml-identity-provider.md)

# Menyiapkan Facebook sebagai kumpulan identitas IDP
<a name="facebook"></a>

Kumpulan identitas Amazon Cognito bekerja dengan Facebook untuk menyediakan otentikasi federasi bagi pengguna aplikasi Anda. Bagian ini menjelaskan cara mendaftar dan mengatur aplikasi Anda dengan Facebook sebagai IDP.

## Mengatur Facebook
<a name="set-up-facebook"></a>

Daftarkan aplikasi Anda dengan Facebook sebelum Anda mengautentikasi pengguna Facebook dan berinteraksi dengan Facebook APIs.

[Portal Pengembang Facebook](https://developers.facebook.com/) membantu Anda mengatur aplikasi Anda. Lakukan prosedur ini sebelum Anda mengintegrasikan Facebook di kumpulan identitas Amazon Cognito Anda:

**catatan**  
Federasi kumpulan identitas Amazon Cognito tidak kompatibel dengan Login [Terbatas Facebook](https://developers.facebook.com/docs/facebook-login/limited-login). Untuk informasi selengkapnya tentang cara mengatur Login Facebook untuk iOS tanpa melebihi izin yang ditetapkan untuk Login Terbatas, lihat [Login Facebook untuk iOS - Mulai Cepat](https://developers.facebook.com/docs/facebook-login/ios) di *Meta* untuk Pengembang.

**Menyiapkan Facebook**

1. Pada [Portal Developer Facebook](https://developers.facebook.com/), masuk dengan kredensial Facebook Anda.

1. Dari menu **Aplikasi**, pilih **Tambah Aplikasi Baru**.

1. Pilih platform dan selesaikan proses mulai cepat.

### Android
<a name="set-up-facebook-1.android"></a>

Untuk informasi selengkapnya tentang cara mengintegrasikan aplikasi Android dengan Login Facebook, lihat [Panduan Memulai Facebook](https://developers.facebook.com/docs/android/getting-started).

### iOS - Objective-C
<a name="set-up-facebook-1.ios-objc"></a>

Untuk informasi selengkapnya tentang cara mengintegrasikan aplikasi iOS Objective-C dengan Login Facebook, lihat Panduan [Memulai Facebook](https://developers.facebook.com/docs/ios/getting-started/).

### iOS - Swift
<a name="set-up-facebook-1.ios-swift"></a>

Untuk informasi selengkapnya tentang cara mengintegrasikan aplikasi iOS Swift dengan Login Facebook, lihat [Panduan Memulai Facebook](https://developers.facebook.com/docs/ios/getting-started/).

### JavaScript
<a name="set-up-facebook-1.javascript"></a>

Untuk informasi selengkapnya tentang cara mengintegrasikan aplikasi JavaScript web dengan Login Facebook, lihat [Panduan Memulai Facebook](https://developers.facebook.com/docs/facebook-login/login-flow-for-web/v2.3).

## Mengonfigurasi penyedia identitas di konsol kumpulan identitas Amazon Cognito
<a name="configure-the-external-provider-in-the-amazon-cognito-console"></a>

Gunakan prosedur berikut untuk mengonfigurasi penyedia identitas Anda.

**Untuk menambahkan penyedia identitas Facebook (iDP)**

1. Pilih **kumpulan Identitas** dari konsol [Amazon Cognito](https://console.aws.amazon.com/cognito/home). Pilih kumpulan identitas.

1. Pilih tab **Akses pengguna**.

1. Pilih **Tambahkan penyedia identitas**.

1. Pilih **Facebook**.

1. Masukkan **ID Aplikasi** OAuth proyek yang Anda buat di [Meta for Developers](https://developers.facebook.com/). Untuk informasi selengkapnya, lihat [Login Facebook](https://developers.facebook.com/docs/facebook-login/) di *Meta for Developers Docs*.

1. **Untuk menyetel peran yang diminta Amazon Cognito saat mengeluarkan kredensil kepada pengguna yang telah diautentikasi dengan penyedia ini, konfigurasikan setelan Peran.**

   1. Anda dapat menetapkan pengguna dari IDP tersebut peran **Default** yang Anda atur saat mengonfigurasi peran **Terautentikasi, atau Anda** **dapat Memilih** peran dengan aturan.

     1. Jika Anda memilih **Pilih peran dengan aturan**, masukkan **Klaim** sumber dari autentikasi pengguna Anda, **Operator** yang ingin Anda bandingkan dengan klaim, **Nilai** yang akan menyebabkan kecocokan dengan pilihan peran ini, dan **Peran** yang ingin Anda tetapkan saat **penetapan Peran** cocok. Pilih **Tambahkan yang lain** untuk membuat aturan tambahan berdasarkan kondisi yang berbeda.

     1. Pilih **Resolusi Peran**. **Jika klaim pengguna tidak sesuai dengan aturan, Anda dapat menolak kredensil atau mengeluarkan kredensi untuk peran yang Diautentikasi.**

1. **Untuk mengubah tag utama yang ditetapkan Amazon Cognito saat mengeluarkan kredensil kepada pengguna yang telah diautentikasi dengan penyedia ini, konfigurasikan Atribut untuk kontrol akses.**

   1. Untuk tidak menerapkan tag utama, pilih **Tidak aktif**.

   1. Untuk menerapkan tag utama berdasarkan `sub` dan `aud` klaim, pilih **Gunakan pemetaan default**.

   1. Untuk membuat skema atribut kustom Anda sendiri ke tag utama, pilih **Gunakan pemetaan khusus**. Kemudian masukkan **kunci Tag** yang ingin Anda sumber dari setiap **Klaim** yang ingin Anda wakili dalam tag.

1. Pilih **Simpan perubahan**.

## Menggunakan Facebook
<a name="using-facebook"></a>

### Android
<a name="using-facebook-1.android"></a>

Untuk menambahkan otentikasi Facebook, pertama-tama ikuti [panduan Facebook](https://developers.facebook.com/docs/android) dan integrasikan SDK Facebook ke dalam aplikasi Anda. Kemudian tambahkan [tombol **Login dengan Facebook**](https://developers.facebook.com/docs/facebook-login/android) ke antarmuka pengguna Android Anda. SDK Facebook menggunakan objek sesi untuk melacak keadaannya. Amazon Cognito menggunakan token akses dari objek sesi ini untuk mengautentikasi pengguna, menghasilkan pengenal unik, dan, jika diperlukan, memberikan pengguna akses ke sumber daya lain. AWS 

Setelah Anda mengautentikasi pengguna Anda dengan Facebook SDK, tambahkan token sesi ke penyedia kredensi Amazon Cognito.

SDK Facebook 4.0 atau lebih baru:

```
Map<String, String> logins = new HashMap<String, String>();
logins.put("graph.facebook.com", AccessToken.getCurrentAccessToken().getToken());
credentialsProvider.setLogins(logins);
```

SDK Facebook sebelum 4.0:

```
Map<String, String> logins = new HashMap<String, String>();
logins.put("graph.facebook.com", Session.getActiveSession().getAccessToken());
credentialsProvider.setLogins(logins);
```

Proses login Facebook menginisialisasi sesi tunggal di SDK-nya. Objek sesi Facebook berisi OAuth token yang digunakan Amazon Cognito untuk menghasilkan AWS kredensil bagi pengguna akhir Anda yang diautentikasi. Amazon Cognito juga menggunakan token untuk memeriksa database pengguna Anda untuk keberadaan pengguna yang cocok dengan identitas Facebook khusus ini. Jika pengguna sudah ada, API mengembalikan pengidentifikasi yang ada. Jika tidak, API mengembalikan pengenal baru. SDK klien secara otomatis menyimpan pengenal di perangkat lokal.

**catatan**  
Setelah Anda mengatur peta login, lakukan panggilan ke `refresh` atau `get` untuk mengambil kredensialnya. AWS 

### iOS - Objective-C
<a name="using-facebook-1.ios-objc"></a>

Untuk menambahkan otentikasi Facebook, pertama-tama ikuti [panduan Facebook](https://developers.facebook.com/docs/ios) dan integrasikan SDK Facebook ke dalam aplikasi Anda. Kemudian tambahkan [Tombol Masuk dengan Facebook](https://developers.facebook.com/docs/facebook-login/ios) ke antarmuka pengguna Anda. SDK Facebook menggunakan objek sesi untuk melacak keadaannya. Amazon Cognito menggunakan token akses dari objek sesi ini untuk mengautentikasi pengguna dan mengikat mereka ke kolam identitas Amazon Cognito unik (identitas federasi).

Untuk menyediakan token akses Facebook ke Amazon Cognito, terapkan protokol. [https://github.com/aws-amplify/aws-sdk-ios](https://github.com/aws-amplify/aws-sdk-ios)

Saat Anda menerapkan `logins` metode ini, kembalikan kamus yang berisi`AWSIdentityProviderFacebook`. Kamus ini bertindak sebagai kunci, dan token akses saat ini dari pengguna Facebook yang diautentikasi bertindak sebagai nilai, seperti yang ditunjukkan pada contoh kode berikut.

```
- (AWSTask<NSDictionary<NSString *, NSString *> *> *)logins {
    FBSDKAccessToken* fbToken = [FBSDKAccessToken currentAccessToken];
    if(fbToken){
        NSString *token = fbToken.tokenString;
        return [AWSTask taskWithResult: @{ AWSIdentityProviderFacebook : token }];
    }else{
            return [AWSTask taskWithError:[NSError errorWithDomain:@"Facebook Login"
                                                          code:-1
                                                      userInfo:@{@"error":@"No current Facebook access token"}]];
    }
}
```

Saat Anda memberi contoh `AWSCognitoCredentialsProvider`, teruskan kelas yang menerapkan `AWSIdentityProviderManager` sebagai nilai dari `identityProviderManager` dalam konstruktor. Untuk informasi lebih lanjut, buka halaman [AWSCognitoCredentialsProvider](https://github.com/aws-amplify/aws-sdk-ios)referensi dan pilih **initWithRegionJenis:identityPoolId: identityProviderManager**.

### iOS - Swift
<a name="using-facebook-1.ios-swift"></a>

Untuk menambahkan otentikasi Facebook, pertama-tama ikuti [panduan Facebook](https://developers.facebook.com/docs/ios) dan integrasikan SDK Facebook ke dalam aplikasi Anda. Kemudian tambahkan [Tombol Masuk dengan Facebook](https://developers.facebook.com/docs/facebook-login/ios) ke antarmuka pengguna Anda. SDK Facebook menggunakan objek sesi untuk melacak keadaannya. Amazon Cognito menggunakan token akses dari objek sesi ini untuk mengautentikasi pengguna dan mengikat mereka ke kolam identitas Amazon Cognito unik (identitas federasi).

**catatan**  
Federasi kumpulan identitas Amazon Cognito tidak kompatibel dengan Login [Terbatas Facebook](https://developers.facebook.com/docs/facebook-login/limited-login). Untuk informasi selengkapnya tentang cara mengatur Login Facebook untuk iOS tanpa melebihi izin yang ditetapkan untuk Login Terbatas, lihat [Login Facebook untuk iOS - Mulai Cepat](https://developers.facebook.com/docs/facebook-login/ios) di *Meta* untuk Pengembang.

Untuk menyediakan token akses Facebook ke Amazon Cognito, terapkan protokol. [https://github.com/aws-amplify/aws-sdk-ios](https://github.com/aws-amplify/aws-sdk-ios)

Saat Anda menerapkan `logins` metode ini, kembalikan kamus yang berisi`AWSIdentityProviderFacebook`. Kamus ini bertindak sebagai kunci, dan token akses saat ini dari pengguna Facebook yang diautentikasi bertindak sebagai nilai, seperti yang ditunjukkan pada contoh kode berikut.

```
class FacebookProvider: NSObject, AWSIdentityProviderManager {
    func logins() -> AWSTask<NSDictionary> {
        if let token = AccessToken.current?.authenticationToken {
            return AWSTask(result: [AWSIdentityProviderFacebook:token])
        }
        return AWSTask(error:NSError(domain: "Facebook Login", code: -1 , userInfo: ["Facebook" : "No current Facebook access token"]))
    }
}
```

Saat Anda memberi contoh `AWSCognitoCredentialsProvider`, teruskan kelas yang menerapkan `AWSIdentityProviderManager` sebagai nilai dari `identityProviderManager` dalam konstruktor. Untuk informasi lebih lanjut, buka halaman [https://github.com/aws-amplify/aws-sdk-ios](https://github.com/aws-amplify/aws-sdk-ios)referensi dan pilih **initWithRegionJenis:identityPoolId: identityProviderManager**.

### JavaScript
<a name="using-facebook-1.javascript"></a>

Untuk menambahkan otentikasi Facebook, ikuti [Login Facebook untuk Web](https://developers.facebook.com/docs/facebook-login/login-flow-for-web/v2.3) dan tambahkan tombol **Login dengan Facebook** di situs web Anda. SDK Facebook menggunakan objek sesi untuk melacak keadaannya. Amazon Cognito menggunakan token akses dari objek sesi ini untuk mengautentikasi pengguna, menghasilkan pengenal unik, dan, jika diperlukan, memberikan pengguna akses ke sumber daya lain. AWS 

Setelah Anda mengautentikasi pengguna Anda dengan Facebook SDK, tambahkan token sesi ke penyedia kredensi Amazon Cognito.

```
FB.login(function (response) {

  // Check if the user logged in successfully.
  if (response.authResponse) {

    console.log('You are now logged in.');

    // Add the Facebook access token to the Amazon Cognito credentials login map.
    AWS.config.credentials = new AWS.CognitoIdentityCredentials({
      IdentityPoolId: 'IDENTITY_POOL_ID',
      Logins: {
        'graph.facebook.com': response.authResponse.accessToken
      }
    });

    // Obtain AWS credentials
    AWS.config.credentials.get(function(){
        // Access AWS resources here.
    });

  } else {
    console.log('There was a problem logging you in.');
  }

});
```

SDK Facebook memperoleh OAuth token yang digunakan Amazon Cognito untuk AWS menghasilkan kredensil bagi pengguna akhir Anda yang diautentikasi. Amazon Cognito juga menggunakan token untuk memeriksa pada basis data pengguna Anda untuk keberadaan pengguna yang cocok dengan identitas Facebook tertentu ini. Jika pengguna sudah ada, API mengembalikan pengidentifikasi yang ada. Jika tidak sebuah pengidentifikasi baru dikembalikan. Pengidentifikasi secara otomatis di-cache oleh SDK klien di perangkat lokal.

**catatan**  
Setelah Anda mengatur peta login, lakukan panggilan ke `refresh` atau `get` untuk mendapatkan kredensialnya. [Untuk contoh kode, lihat “Gunakan Kasus 17, Mengintegrasikan Kumpulan Pengguna dengan Identitas Cognito,” di JavaScript file README.](https://github.com/amazon-archives/amazon-cognito-identity-js/blob/master/README.md)

### Unity
<a name="using-facebook-1.unity"></a>

Untuk menambahkan otentikasi Facebook, pertama-tama ikuti [panduan Facebook](https://developers.facebook.com/docs/unity) dan integrasikan SDK Facebook ke dalam aplikasi Anda. Amazon Cognito menggunakan token akses Facebook dari `FB` objek untuk menghasilkan pengenal pengguna unik yang terkait dengan identitas Amazon Cognito.

Setelah Anda mengautentikasi pengguna Anda dengan Facebook SDK, tambahkan token sesi ke penyedia kredensi Amazon Cognito:

```
void Start()
{
    FB.Init(delegate() {
        if (FB.IsLoggedIn) { //User already logged in from a previous session
            AddFacebookTokenToCognito();
        } else {
            FB.Login ("email", FacebookLoginCallback);
        }
    });
}

void FacebookLoginCallback(FBResult result)
{
    if (FB.IsLoggedIn)
    {
        AddFacebookTokenToCognito();
    }
    else
    {
        Debug.Log("FB Login error");
    }
}

void AddFacebookTokenToCognito()
{
    credentials.AddLogin ("graph.facebook.com", AccessToken.CurrentAccessToken.TokenString);
}
```

Sebelum Anda menggunakan`FB.AccessToken`, hubungi `FB.Login()` dan pastikan `FB.IsLoggedIn` itu benar.

### Xamarin
<a name="using-facebook-1.xamarin"></a>

**Xamarin untuk Android:**

```
public void InitializeFacebook() {
    FacebookSdk.SdkInitialize(this.ApplicationContext);
    callbackManager = CallbackManagerFactory.Create();
    LoginManager.Instance.RegisterCallback(callbackManager, new FacebookCallback &lt; LoginResult &gt; () {
      HandleSuccess = loginResult = &gt; {
        var accessToken = loginResult.AccessToken;
        credentials.AddLogin("graph.facebook.com", accessToken.Token);
        //open new activity
      },
      HandleCancel = () = &gt; {
        //throw error message
      },
      HandleError = loginError = &gt; {
        //throw error message
      }
    });
    LoginManager.Instance.LogInWithReadPermissions(this, new List &lt; string &gt; {
      "public_profile"
    });
  }
```

**Xamarin untuk iOS:**

```
public void InitializeFacebook() {
  LoginManager login = new LoginManager();
  login.LogInWithReadPermissions(readPermissions.ToArray(), delegate(LoginManagerLoginResult result, NSError error) {
    if (error != null) {
      //throw error message
    } else if (result.IsCancelled) {
      //throw error message
    } else {
      var accessToken = loginResult.AccessToken;
      credentials.AddLogin("graph.facebook.com", accessToken.Token);
      //open new view controller
    }
  });
}
```

# Menyiapkan Login with Amazon sebagai kumpulan identitas IDP
<a name="amazon"></a>

Kumpulan identitas Amazon Cognito berfungsi dengan Login with Amazon untuk menyediakan otentikasi gabungan bagi pengguna aplikasi seluler dan web Anda. Bagian ini menjelaskan cara mendaftar dan menyiapkan aplikasi Anda dengan Login with Amazon sebagai penyedia identitas (iDP).

Siapkan Login with Amazon untuk bekerja dengan Amazon Cognito di Portal [Pengembang](https://developer.amazon.com/login-with-amazon). Untuk informasi selengkapnya, lihat [Menyiapkan Login with Amazon](https://developer.amazon.com/docs/login-with-amazon/faq.html#setting-up-login-with-amazon) di FAQ Login with Amazon.

**catatan**  
Untuk mengintegrasikan Login with Amazon ke dalam aplikasi Xamarin, ikuti Panduan Memulai [Xamarin](https://developer.xamarin.com/guides/cross-platform/getting_started/).

**catatan**  
Anda tidak dapat mengintegrasikan Login with Amazon secara native di platform Unity. Sebagai gantinya, gunakan tampilan web dan buka alur masuk browser.

## Menyiapkan Login with Amazon
<a name="login-with-amazon-setup"></a>

**Menerapkan Login with Amazon**

Di [portal pengembang Amazon](https://developer.amazon.com/apps-and-games/login-with-amazon), Anda dapat menyiapkan OAuth aplikasi untuk diintegrasikan dengan kumpulan identitas Anda, menemukan dokumentasi Login with Amazon, dan mengunduh SDKs. Pilih **Konsol pengembang**, lalu **Login with Amazon** di portal pengembang. Anda dapat membuat profil keamanan untuk aplikasi Anda dan kemudian membangun Login with Amazon mekanisme autentikasi ke dalam aplikasi Anda. Lihat [Mendapatkan kredensil](getting-credentials.md) untuk informasi selengkapnya tentang cara mengintegrasikan otentikasi Login with Amazon dengan aplikasi Anda.

Amazon mengeluarkan **ID klien OAuth ** 2.0 untuk profil keamanan baru Anda. Anda dapat menemukan **ID klien** di tab **Pengaturan Web** profil keamanan. Masukkan **ID Profil Keamanan** di bidang **ID Aplikasi** Login with Amazon iDP di kumpulan identitas Anda.

**catatan**  
Anda memasukkan **ID Profil Keamanan** di bidang **ID Aplikasi** Login with Amazon iDP di kumpulan identitas Anda. Ini berbeda dari kumpulan pengguna, yang menggunakan **ID klien**.

## Konfigurasikan penyedia eksternal di konsol Amazon Cognito
<a name="login-with-amazon-configure-provider"></a>

**Untuk menambahkan Login with Amazon identity provider (IDP)**

1. Pilih **kumpulan Identitas** dari konsol [Amazon Cognito](https://console.aws.amazon.com/cognito/home). Pilih kumpulan identitas.

1. Pilih tab **Akses pengguna**.

1. Pilih **Tambahkan penyedia identitas**.

1. Pilih **Login with Amazon**

1. Masukkan **ID Aplikasi** OAuth proyek yang Anda buat saat [Login with Amazon](https://developer.amazon.com/apps-and-games/login-with-amazon). Untuk informasi selengkapnya, lihat [Login with Amazon Documentation](https://developer.amazon.com/docs/login-with-amazon/documentation-overview.html).

1. **Untuk menyetel peran yang diminta Amazon Cognito saat mengeluarkan kredensil kepada pengguna yang telah diautentikasi dengan penyedia ini, konfigurasikan setelan Peran.**

   1. Anda dapat menetapkan pengguna dari IDP tersebut peran **Default** yang Anda atur saat mengonfigurasi peran **Terautentikasi, atau Anda** **dapat Memilih** peran dengan aturan.

     1. Jika Anda memilih **Pilih peran dengan aturan**, masukkan **Klaim** sumber dari autentikasi pengguna Anda, **Operator** yang ingin Anda bandingkan dengan klaim, **Nilai** yang akan menyebabkan kecocokan dengan pilihan peran ini, dan **Peran** yang ingin Anda tetapkan saat **penetapan Peran** cocok. Pilih **Tambahkan yang lain** untuk membuat aturan tambahan berdasarkan kondisi yang berbeda.

     1. Pilih **Resolusi Peran**. **Jika klaim pengguna tidak sesuai dengan aturan, Anda dapat menolak kredensil atau mengeluarkan kredensi untuk peran yang Diautentikasi.**

1. **Untuk mengubah tag utama yang ditetapkan Amazon Cognito saat mengeluarkan kredensil kepada pengguna yang telah diautentikasi dengan penyedia ini, konfigurasikan Atribut untuk kontrol akses.**

   1. Untuk tidak menerapkan tag utama, pilih **Tidak aktif**.

   1. Untuk menerapkan tag utama berdasarkan `sub` dan `aud` klaim, pilih **Gunakan pemetaan default**.

   1. Untuk membuat skema atribut kustom Anda sendiri ke tag utama, pilih **Gunakan pemetaan khusus**. Kemudian masukkan **kunci Tag** yang ingin Anda sumber dari setiap **Klaim** yang ingin Anda wakili dalam tag.

1. Pilih **Simpan perubahan**.

## Menggunakan Login with Amazon: Android
<a name="set-up-amazon-1.android"></a>

Setelah Anda mengautentikasi login Amazon, Anda dapat meneruskan token ke penyedia kredensi Amazon Cognito dalam metode onSuccess antarmuka. TokenListener Kodenya terlihat seperti ini:

```
@Override
public void onSuccess(Bundle response) {
    String token = response.getString(AuthzConstants.BUNDLE_KEY.TOKEN.val);
    Map<String, String> logins = new HashMap<String, String>();
    logins.put("www.amazon.com", token);
    credentialsProvider.setLogins(logins);
}
```

## Menggunakan Login with Amazon: iOS - Objective-C
<a name="set-up-amazon-1.ios-objc"></a>

Setelah Anda mengautentikasi login Amazon, Anda dapat meneruskan token ke penyedia kredensi Amazon Cognito dengan metode: requestDidSucceed AMZNAccess TokenDelegate

```
- (void)requestDidSucceed:(APIResult \*)apiResult {
    if (apiResult.api == kAPIAuthorizeUser) {
        [AIMobileLib getAccessTokenForScopes:[NSArray arrayWithObject:@"profile"] withOverrideParams:nil delegate:self];
    }
    else if (apiResult.api == kAPIGetAccessToken) {
        credentialsProvider.logins = @{ @(AWSCognitoLoginProviderKeyLoginWithAmazon): apiResult.result };
    }
}}
```

## Menggunakan Login with Amazon: iOS - Swift
<a name="set-up-amazon-1.ios-swift"></a>

Setelah Anda mengautentikasi login Amazon, Anda dapat meneruskan token ke penyedia kredensi Amazon Cognito dengan metode: `requestDidSucceed` `AMZNAccessTokenDelegate`

```
func requestDidSucceed(apiResult: APIResult!) {
    if apiResult.api == API.AuthorizeUser {
        AIMobileLib.getAccessTokenForScopes(["profile"], withOverrideParams: nil, delegate: self)
    } else if apiResult.api == API.GetAccessToken {
        credentialsProvider.logins = [AWSCognitoLoginProviderKey.LoginWithAmazon.rawValue: apiResult.result]
    }
}
```

## Gunakan Login with Amazon: JavaScript
<a name="set-up-amazon-1.javascript"></a>

Setelah pengguna mengautentikasi dengan Login with Amazon dan diarahkan kembali ke situs web Anda, access\$1token Login with Amazon disediakan dalam string kueri. Berikan token itu ke dalam peta login kredensial.

```
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
   IdentityPoolId: 'IDENTITY_POOL_ID',
   Logins: {
       'www.amazon.com': 'Amazon Access Token'
   }
});
```

# Menyiapkan Google sebagai kumpulan identitas iDP
<a name="google"></a>

Kumpulan identitas Amazon Cognito bekerja dengan Google untuk menyediakan otentikasi federasi bagi pengguna aplikasi seluler Anda. Bagian ini menjelaskan cara mendaftar dan mengatur aplikasi Anda dengan Google sebagai IDP.

## Android
<a name="set-up-google-1.android"></a>

**catatan**  
Jika aplikasi Anda menggunakan Google dan tersedia di beberapa platform seluler, Anda harus mengonfigurasinya sebagai Penyedia [OpenID Connect](open-id.md). Tambahkan semua klien yang dibuat IDs sebagai nilai audiens tambahan untuk integrasi yang lebih baik. Untuk mempelajari lebih lanjut tentang model identitas lintas klien Google, lihat [Identitas lintas klien](https://developers.google.com/accounts/docs/CrossClientAuth).

**Menyiapkan Google**

Untuk mengaktifkan Google Sign-in untuk Android, buat project konsol Google Developers untuk aplikasi Anda.

1. Buka [Konsol Developer Google](https://console.developers.google.com/) dan buat proyek baru.

1. Pilih **APIs & Layanan**, lalu **layar OAuth persetujuan**. Sesuaikan informasi yang ditampilkan Google kepada pengguna Anda saat Google meminta persetujuan mereka untuk membagikan data profil mereka dengan aplikasi Anda.

1. Pilih **Kredensial**, lalu **Buat** kredensial. Pilih **ID OAuth klien**. Pilih **Android** sebagai **tipe Aplikasi**. Buat ID klien terpisah untuk setiap platform tempat Anda mengembangkan aplikasi.

1. Dari **Kredensial**, pilih **Kelola akun layanan**. Pilih **Buat akun layanan**. Masukkan detail akun layanan Anda, lalu pilih **Buat dan lanjutkan**.

1. Berikan akses akun layanan ke proyek Anda. Berikan pengguna akses ke akun layanan sesuai kebutuhan aplikasi Anda.

1. Pilih akun layanan baru Anda, pilih tab **Tombol**, dan **tombol Tambah**. Buat dan unduh kunci JSON baru.

Untuk informasi selengkapnya tentang cara menggunakan konsol Google Developers, lihat [Membuat dan mengelola project](https://cloud.google.com/resource-manager/docs/creating-managing-projects) di dokumentasi Google Cloud.

Untuk informasi selengkapnya tentang cara mengintegrasikan Google ke dalam aplikasi Android, lihat [Mengautentikasi pengguna dengan Masuk dengan Google](https://developer.android.com/identity/sign-in/credential-manager-siwg) di dokumentasi Google Identity.

**Untuk menambahkan penyedia identitas Google (iDP)**

1. Pilih **kumpulan Identitas** dari konsol [Amazon Cognito](https://console.aws.amazon.com/cognito/home). Pilih kumpulan identitas.

1. Pilih tab **Akses pengguna**.

1. Pilih **Tambahkan penyedia identitas**.

1. Pilih **Google**.

1. Masukkan **ID Klien** OAuth proyek yang Anda buat di [Google Cloud Platform](https://console.cloud.google.com/). Untuk informasi selengkapnya, lihat [Menyiapkan OAuth 2.0](https://support.google.com/cloud/answer/6158849) di *Bantuan Google Cloud Platform Console*.

1. **Untuk menyetel peran yang diminta Amazon Cognito saat mengeluarkan kredensil kepada pengguna yang telah diautentikasi dengan penyedia ini, konfigurasikan setelan Peran.**

   1. Anda dapat menetapkan pengguna dari IDP tersebut peran **Default** yang Anda atur saat mengonfigurasi peran **Terautentikasi, atau Anda** **dapat Memilih** peran dengan aturan.

     1. Jika Anda memilih **Pilih peran dengan aturan**, masukkan **Klaim** sumber dari autentikasi pengguna Anda, **Operator** yang ingin Anda bandingkan dengan klaim, **Nilai** yang akan menyebabkan kecocokan dengan pilihan peran ini, dan **Peran** yang ingin Anda tetapkan saat **penetapan Peran** cocok. Pilih **Tambahkan yang lain** untuk membuat aturan tambahan berdasarkan kondisi yang berbeda.

     1. Pilih **Resolusi Peran**. **Jika klaim pengguna tidak sesuai dengan aturan, Anda dapat menolak kredensil atau mengeluarkan kredensi untuk peran yang Diautentikasi.**

1. **Untuk mengubah tag utama yang ditetapkan Amazon Cognito saat mengeluarkan kredensil kepada pengguna yang telah diautentikasi dengan penyedia ini, konfigurasikan Atribut untuk kontrol akses.**

   1. Untuk tidak menerapkan tag utama, pilih **Tidak aktif**.

   1. Untuk menerapkan tag utama berdasarkan `sub` dan `aud` klaim, pilih **Gunakan pemetaan default**.

   1. Untuk membuat skema atribut kustom Anda sendiri ke tag utama, pilih **Gunakan pemetaan khusus**. Kemudian masukkan **kunci Tag** yang ingin Anda sumber dari setiap **Klaim** yang ingin Anda wakili dalam tag.

1. Pilih **Simpan perubahan**.

**Gunakan Google**

Untuk mengaktifkan login dengan Google di aplikasi Anda, ikuti instruksi dalam [dokumentasi Google untuk Android](https://developers.google.com/identity/sign-in/android/start). Saat pengguna masuk, mereka meminta token otentikasi OpenID Connect dari Google. Amazon Cognito kemudian menggunakan token untuk mengautentikasi pengguna dan menghasilkan pengenal unik.

Kode contoh berikut menunjukkan cara mengambil token otentikasi dari layanan Google Play:

```
GooglePlayServicesUtil.isGooglePlayServicesAvailable(getApplicationContext());
AccountManager am = AccountManager.get(this);
Account[] accounts = am.getAccountsByType(GoogleAuthUtil.GOOGLE_ACCOUNT_TYPE);
String token = GoogleAuthUtil.getToken(getApplicationContext(), accounts[0].name,
        "audience:server:client_id:YOUR_GOOGLE_CLIENT_ID");
Map<String, String> logins = new HashMap<String, String>();
logins.put("accounts.google.com", token);
credentialsProvider.setLogins(logins);
```

## iOS - Objective-C
<a name="set-up-google-1.ios-objc"></a>

**catatan**  
Jika aplikasi Anda menggunakan Google dan tersedia di beberapa platform seluler, konfigurasikan Google sebagai Penyedia [OpenID Connect](open-id.md). Tambahkan semua klien yang dibuat IDs sebagai nilai audiens tambahan untuk integrasi yang lebih baik. Untuk mempelajari lebih lanjut tentang model identitas lintas klien Google, lihat [Identitas lintas klien](https://developers.google.com/accounts/docs/CrossClientAuth).

**Menyiapkan Google**

Untuk mengaktifkan Google Sign-in untuk iOS, buat project konsol Google Developers untuk aplikasi Anda.

1. Buka [Konsol Developer Google](https://console.developers.google.com/) dan buat proyek baru.

1. Pilih **APIs & Layanan**, lalu **layar OAuth persetujuan**. Sesuaikan informasi yang ditampilkan Google kepada pengguna Anda saat Google meminta persetujuan mereka untuk membagikan data profil mereka dengan aplikasi Anda.

1. Pilih **Kredensial**, lalu **Buat** kredensial. Pilih **ID OAuth klien**. Pilih **iOS** sebagai **tipe Aplikasi**. Buat ID klien terpisah untuk setiap platform tempat Anda mengembangkan aplikasi.

1. Dari **Kredensial**, pilih **Kelola akun layanan**. Pilih **Buat akun layanan**. Masukkan detail akun layanan Anda, lalu pilih **Buat dan lanjutkan**.

1. Berikan akses akun layanan ke proyek Anda. Berikan pengguna akses ke akun layanan sesuai kebutuhan aplikasi Anda.

1. Pilih akun layanan baru Anda. Pilih tab **Keys**, dan **Add key**. Buat dan unduh kunci JSON baru.

Untuk informasi selengkapnya tentang cara menggunakan konsol Google Developers, lihat [Membuat dan mengelola project](https://cloud.google.com/resource-manager/docs/creating-managing-projects) di dokumentasi Google Cloud.

Untuk informasi selengkapnya tentang cara mengintegrasikan Google ke dalam aplikasi iOS, lihat [Google Sign-In untuk iOS](https://developers.google.com/identity/sign-in/ios/start-integrating) di dokumentasi Google Identity.

**Untuk menambahkan penyedia identitas Google (iDP)**

1. Pilih **kumpulan Identitas** dari konsol [Amazon Cognito](https://console.aws.amazon.com/cognito/home). Pilih kumpulan identitas.

1. Pilih tab **Akses pengguna**.

1. Pilih **Tambahkan penyedia identitas**.

1. Pilih **Google**.

1. Masukkan **ID Klien** OAuth proyek yang Anda buat di [Google Cloud Platform](https://console.cloud.google.com/). Untuk informasi selengkapnya, lihat [Menyiapkan OAuth 2.0](https://support.google.com/cloud/answer/6158849) di *Bantuan Google Cloud Platform Console*.

1. **Untuk menyetel peran yang diminta Amazon Cognito saat mengeluarkan kredensil kepada pengguna yang telah mengautentikasi dengan penyedia ini, konfigurasikan setelan Peran.**

   1. Anda dapat menetapkan pengguna dari IDP tersebut peran **Default** yang Anda atur saat mengonfigurasi peran **Terautentikasi, atau Anda** **dapat Memilih** peran dengan aturan.

     1. Jika Anda memilih **Pilih peran dengan aturan**, masukkan **Klaim** sumber dari autentikasi pengguna Anda, **Operator** yang ingin Anda bandingkan dengan klaim, **Nilai** yang akan menyebabkan kecocokan dengan pilihan peran ini, dan **Peran** yang ingin Anda tetapkan saat **penetapan Peran** cocok. Pilih **Tambahkan yang lain** untuk membuat aturan tambahan berdasarkan kondisi yang berbeda.

     1. Pilih **Resolusi Peran**. **Jika klaim pengguna tidak sesuai dengan aturan, Anda dapat menolak kredensil atau mengeluarkan kredensi untuk peran yang Diautentikasi.**

1. **Untuk mengubah tag utama yang ditetapkan Amazon Cognito saat mengeluarkan kredensil kepada pengguna yang telah diautentikasi dengan penyedia ini, konfigurasikan Atribut untuk kontrol akses.**

   1. Untuk tidak menerapkan tag utama, pilih **Tidak aktif**.

   1. Untuk menerapkan tag utama berdasarkan `sub` dan `aud` klaim, pilih **Gunakan pemetaan default**.

   1. Untuk membuat skema atribut kustom Anda sendiri ke tag utama, pilih **Gunakan pemetaan khusus**. Kemudian masukkan **kunci Tag** yang ingin Anda sumber dari setiap **Klaim** yang ingin Anda wakili dalam tag.

1. Pilih **Simpan perubahan**.

**Gunakan Google**

Untuk mengaktifkan login dengan Google di aplikasi Anda, ikuti [Dokumentasi Google untuk iOS](https://developers.google.com/identity/sign-in/ios/start/). Autentikasi yang berhasil menghasilkan token autentikasi OpenID Connect, yang digunakan Amazon Cognito untuk mengautentikasi pengguna dan menghasilkan pengidentifikasi unik.

Autentikasi yang berhasil menghasilkan objek `GTMOAuth2Authentication`, yang berisi `id_token`, yang digunakan Amazon Cognito untuk mengautentikasi pengguna dan menghasilkan pengidentifikasi unik:

```
- (void)finishedWithAuth: (GTMOAuth2Authentication *)auth error: (NSError *) error {
        NSString *idToken = [auth.parameters objectForKey:@"id_token"];
        credentialsProvider.logins = @{ @(AWSCognitoLoginProviderKeyGoogle): idToken };
    }
```

## iOS - Swift
<a name="set-up-google-1.ios-swift"></a>

**catatan**  
Jika aplikasi Anda menggunakan Google dan tersedia di beberapa platform seluler, konfigurasikan Google sebagai Penyedia [OpenID Connect](open-id.md). Tambahkan semua klien yang dibuat IDs sebagai nilai audiens tambahan untuk integrasi yang lebih baik. Untuk mempelajari lebih lanjut tentang model identitas lintas klien Google, lihat [Identitas lintas klien](https://developers.google.com/accounts/docs/CrossClientAuth).

**Menyiapkan Google**

Untuk mengaktifkan Google Sign-in untuk iOS, buat project konsol Google Developers untuk aplikasi Anda.

1. Buka [Konsol Developer Google](https://console.developers.google.com/) dan buat proyek baru.

1. Pilih **APIs & Layanan**, lalu **layar OAuth persetujuan**. Sesuaikan informasi yang ditampilkan Google kepada pengguna Anda saat Google meminta persetujuan mereka untuk membagikan data profil mereka dengan aplikasi Anda.

1. Pilih **Kredensial**, lalu **Buat** kredensial. Pilih **ID OAuth klien**. Pilih **iOS** sebagai **tipe Aplikasi**. Buat ID klien terpisah untuk setiap platform tempat Anda mengembangkan aplikasi.

1. Dari **Kredensial**, pilih **Kelola akun layanan**. Pilih **Buat akun layanan**. Masukkan detail akun layanan Anda, lalu pilih **Buat dan lanjutkan**.

1. Berikan akses akun layanan ke proyek Anda. Berikan pengguna akses ke akun layanan sesuai kebutuhan aplikasi Anda.

1. Pilih akun layanan baru Anda, pilih tab **Tombol**, dan **tombol Tambah**. Buat dan unduh kunci JSON baru.

Untuk informasi selengkapnya tentang cara menggunakan konsol Google Developers, lihat [Membuat dan mengelola project](https://cloud.google.com/resource-manager/docs/creating-managing-projects) di dokumentasi Google Cloud.

Untuk informasi selengkapnya tentang cara mengintegrasikan Google ke dalam aplikasi iOS, lihat [Google Sign-In untuk iOS](https://developers.google.com/identity/sign-in/ios/start-integrating) di dokumentasi Google Identity.

Pilih **Mengelola Kolam Identitas** dari [Halaman beranda konsol Amazon Cognito](https://console.aws.amazon.com/cognito/home):

**Mengonfigurasi penyedia eksternal di Amazon Cognito Console**

1. Pilih nama kumpulan identitas tempat Anda ingin mengaktifkan Google sebagai penyedia eksternal. Halaman **Dasbor** untuk kolam identitas Anda akan muncul.

1. Di sudut kanan atas halaman **Dasbor**, pilih **Edit kolam identitas**. Halaman Edit kolam identitas akan muncul.

1. Gulir ke bawah dan pilih **Penyedia otentikasi** untuk memperluas bagian.

1. Pilih tab **Google**.

1. Pilih **Buka kunci**.

1. Masukkan ID Klien Google yang Anda peroleh dari Google, lalu pilih **Simpan Perubahan**.

**Gunakan Google**

Untuk mengaktifkan login dengan Google di aplikasi Anda, ikuti [Dokumentasi Google untuk iOS](https://developers.google.com/identity/sign-in/ios/start/). Otentikasi yang berhasil menghasilkan token otentikasi OpenID Connect yang digunakan Amazon Cognito untuk mengautentikasi pengguna dan menghasilkan pengenal unik.

Otentikasi yang berhasil menghasilkan `GTMOAuth2Authentication` objek yang berisi file`id_token`. Amazon Cognito menggunakan token ini untuk mengautentikasi pengguna dan menghasilkan pengenal unik:

```
func finishedWithAuth(auth: GTMOAuth2Authentication!, error: NSError!) {
    if error != nil {
      print(error.localizedDescription)
    }
    else {
      let idToken = auth.parameters.objectForKey("id_token")
      credentialsProvider.logins = [AWSCognitoLoginProviderKey.Google.rawValue: idToken!]
    }
}
```

## JavaScript
<a name="set-up-google-1.javascript"></a>

**catatan**  
Jika aplikasi Anda menggunakan Google dan tersedia di beberapa platform seluler, Anda harus mengonfigurasi Google sebagai Penyedia [OpenID Connect](open-id.md). Tambahkan semua klien yang dibuat IDs sebagai nilai audiens tambahan untuk integrasi yang lebih baik. Untuk mempelajari lebih lanjut tentang model identitas lintas klien Google, lihat [Identitas lintas klien](https://developers.google.com/accounts/docs/CrossClientAuth).

**Menyiapkan Google**

Untuk mengaktifkan Google Sign-in untuk aplikasi JavaScript web, buat project konsol Google Developers untuk aplikasi Anda.

1. Buka [Konsol Developer Google](https://console.developers.google.com/) dan buat proyek baru.

1. Pilih **APIs & Layanan**, lalu **layar OAuth persetujuan**. Sesuaikan informasi yang ditampilkan Google kepada pengguna Anda saat Google meminta persetujuan mereka untuk membagikan data profil mereka dengan aplikasi Anda.

1. Pilih **Kredensial**, lalu **Buat** kredensial. Pilih **ID OAuth klien**. Pilih **aplikasi Web** sebagai **tipe Aplikasi**. Buat ID klien terpisah untuk setiap platform tempat Anda mengembangkan aplikasi.

1. Dari **Kredensial**, pilih **Kelola akun layanan**. Pilih **Buat akun layanan**. Masukkan detail akun layanan Anda, lalu pilih **Buat dan lanjutkan**.

1. Berikan akses akun layanan ke proyek Anda. Berikan pengguna akses ke akun layanan sesuai kebutuhan aplikasi Anda.

1. Pilih akun layanan baru Anda, pilih tab **Tombol**, dan **tombol Tambah**. Buat dan unduh kunci JSON baru.

Untuk informasi selengkapnya tentang cara menggunakan konsol Google Developers, lihat [Membuat dan mengelola project](https://cloud.google.com/resource-manager/docs/creating-managing-projects) di dokumentasi Google Cloud.

Untuk informasi selengkapnya tentang cara mengintegrasikan Google ke aplikasi web Anda, lihat [Masuk Dengan Google](https://developers.google.com/identity/gsi/web/guides/overview) di dokumentasi Identitas Google.

**Konfigurasikan Penyedia Eksternal di Konsol Amazon Cognito**

**Untuk menambahkan penyedia identitas Google (iDP)**

1. Pilih **kumpulan Identitas** dari konsol [Amazon Cognito](https://console.aws.amazon.com/cognito/home). Pilih kumpulan identitas.

1. Pilih tab **Akses pengguna**.

1. Pilih **Tambahkan penyedia identitas**.

1. Pilih **Google**.

1. Masukkan **ID Klien** OAuth proyek yang Anda buat di [Google Cloud Platform](https://console.cloud.google.com/). Untuk informasi selengkapnya, lihat [Menyiapkan OAuth 2.0](https://support.google.com/cloud/answer/6158849) di *Bantuan Google Cloud Platform Console*.

1. **Untuk menyetel peran yang diminta Amazon Cognito saat mengeluarkan kredensil kepada pengguna yang telah mengautentikasi dengan penyedia ini, konfigurasikan setelan Peran.**

   1. Anda dapat menetapkan pengguna dari IDP tersebut peran **Default** yang Anda atur saat mengonfigurasi peran **Terautentikasi, atau Anda** **dapat Memilih** peran dengan aturan.

     1. Jika Anda memilih **Pilih peran dengan aturan**, masukkan **Klaim** sumber dari autentikasi pengguna Anda, **Operator** yang ingin Anda bandingkan dengan klaim, **Nilai** yang akan menyebabkan kecocokan dengan pilihan peran ini, dan **Peran** yang ingin Anda tetapkan saat **penetapan Peran** cocok. Pilih **Tambahkan yang lain** untuk membuat aturan tambahan berdasarkan kondisi yang berbeda.

     1. Pilih **Resolusi Peran**. **Jika klaim pengguna tidak sesuai dengan aturan, Anda dapat menolak kredensil atau mengeluarkan kredensi untuk peran yang Diautentikasi.**

1. **Untuk mengubah tag utama yang ditetapkan Amazon Cognito saat mengeluarkan kredensil kepada pengguna yang telah diautentikasi dengan penyedia ini, konfigurasikan Atribut untuk kontrol akses.**

   1. Untuk tidak menerapkan tag utama, pilih **Tidak aktif**.

   1. Untuk menerapkan tag utama berdasarkan `sub` dan `aud` klaim, pilih **Gunakan pemetaan default**.

   1. Untuk membuat skema atribut kustom Anda sendiri ke tag utama, pilih **Gunakan pemetaan khusus**. Kemudian masukkan **kunci Tag** yang ingin Anda sumber dari setiap **Klaim** yang ingin Anda wakili dalam tag.

1. Pilih **Simpan perubahan**.

**Gunakan Google**

Untuk mengaktifkan login dengan Google di aplikasi Anda, ikuti [Dokumentasi Google untuk Web](https://developers.google.com/identity/gsi/web/guides/overview).

Otentikasi yang berhasil menghasilkan objek respons yang berisi `id_token` yang digunakan Amazon Cognito untuk mengautentikasi pengguna dan menghasilkan pengenal unik:

```
function signinCallback(authResult) {
  if (authResult['status']['signed_in']) {

     // Add the Google access token to the Amazon Cognito credentials login map.
     AWS.config.credentials = new AWS.CognitoIdentityCredentials({
        IdentityPoolId: 'IDENTITY_POOL_ID',
        Logins: {
           'accounts.google.com': authResult['id_token']
        }
     });

     // Obtain AWS credentials
     AWS.config.credentials.get(function(){
        // Access AWS resources here.
     });
  }
}
```

# Menyiapkan Masuk dengan Apple sebagai kumpulan identitas iDP
<a name="apple"></a>

Kumpulan identitas Amazon Cognito berfungsi dengan Masuk dengan Apple untuk memberikan otentikasi gabungan bagi pengguna aplikasi seluler dan aplikasi web Anda. Bagian ini menjelaskan cara mendaftar dan menyiapkan aplikasi Anda menggunakan Masuk dengan Apple sebagai penyedia identitas (iDP).

Untuk menambahkan Masuk dengan Apple sebagai penyedia otentikasi ke kumpulan identitas, Anda harus menyelesaikan dua prosedur. Pertama, integrasikan Masuk dengan Apple dalam aplikasi, lalu konfigurasikan Masuk dengan Apple di kumpulan identitas. Untuk mengetahui up-to-date informasi terbanyak tentang pengaturan Masuk dengan Apple, lihat [Mengonfigurasi Lingkungan Anda untuk Masuk dengan Apple](https://developer.apple.com/documentation/signinwithapple/configuring-your-environment-for-sign-in-with-apple) di dokumentasi Pengembang Apple.

## Mengatur Masuk dengan Apple
<a name="login-with-apple-setup"></a>

Untuk mengonfigurasi Masuk dengan Apple sebagai IDP, daftarkan aplikasi Anda dengan Apple untuk menerima ID klien.

1. Buat sebuah [akun developer dengan Apple](https://developer.apple.com/programs/enroll/).

1. [Masuk](https://developer.apple.com/account/#/welcome) dengan kredensial Apple Anda.

1. Di panel navigasi kiri, pilih **Sertifikat, IDs & Profil**.

1. Di panel navigasi sebelah kiri, pilih **Pengidentifikasi**.

1. Pada halaman **Pengidentifikasi**, pilih ikon **\$1**.

1. Pada halaman **Daftarkan Pengenal Baru**, pilih **Aplikasi IDs**, lalu pilih **Lanjutkan**.

1. Pada halaman **Daftarkan ID Aplikasi**, lakukan hal berikut:

   1. Di bawah **Deskripsi**, ketikkan deskripsi.

   1. Di bawah **ID Paket,** ketikkan pengidentifikasi. Catat **ID Bundel** ini karena Anda memerlukan nilai ini untuk mengonfigurasi Apple sebagai penyedia di kumpulan identitas. 

   1. Pada **Kemampuan**, pilih **Masuk dengan Apple**, lalu pilih **Edit**.

   1. Pada halaman **Masuk dengan Apple: Konfigurasi ID Aplikasi**, pilih setelan yang sesuai untuk aplikasi Anda. Lalu, pilih **Simpan**.

   1. Pilih **Lanjutkan**.

1. Pada halaman **Konfirmasi ID Aplikasi Anda**, pilih **Daftarkan**.

1. Lanjutkan ke langkah 10 jika Anda ingin mengintegrasikan Masuk dengan Apple dengan aplikasi iOS native. Langkah 11 adalah untuk aplikasi yang ingin Anda integrasikan dengan JS Masuk dengan Apple.

1. Pada halaman **Pengidentifikasi**, pilih IDs menu **Aplikasi**, lalu **Layanan IDs**. Pilih ikon **\$1**.

1. Pada halaman **Daftarkan Pengenal Baru**, pilih **Layanan IDs**, lalu pilih **Lanjutkan**.

1. Pada halaman **Daftarkan ID Layanan**, lakukan hal berikut:

   1. Di bawah **Deskripsi**, ketikkan deskripsi.

   1. Di bawah **Pengidentifikasi**, ketikkan pengidentifikasi. Catat ID layanan karena Anda memerlukan nilai ini untuk mengonfigurasi Apple sebagai penyedia di kumpulan identitas Anda. 

   1. Pilih **Masuk dengan Apple**, lalu pilih **Konfigurasi**.

   1. Pada halaman **Konfigurasi Autentikasi Web**, pilih **ID Aplikasi Utama**. Di bawah **Situs Web URLs**, pilih ikon **\$1**. Untuk **Domain dan Subdomain**, masukkan nama domain aplikasi Anda. Di **Return URLs,** masukkan URL panggilan balik tempat otorisasi mengalihkan pengguna setelah mereka mengautentikasi melalui Masuk dengan Apple. 

   1. Pilih **Berikutnya**.

   1. Pilih **Lanjutkan**, lalu pilih **Daftarkan**.

1. Di panel navigasi sebelah kiri, pilih **Kunci**.

1. Pada halaman **Kunci**, pilih ikon **\$1**.

1. Pada halaman **Daftarkan Kunci Baru**, lakukan hal berikut:

   1. Di bawah **Nama Kunci**, ketikkan nama kunci. 

   1. Pilih **Masuk dengan Apple**, lalu pilih **Konfigurasi**.

   1. Pada halaman **Konfigurasi Kunci**, pilih **ID Aplikasi Utama**, lalu pilih **Simpan**.

   1. Pilih **Lanjutkan**, lalu pilih **Daftarkan**.

**catatan**  
Untuk mengintegrasikan Masuk dengan Apple dengan aplikasi iOS native, lihat [ Menerapkan Autentikasi Pengguna dengan Masuk dengan Apple. ](https://developer.apple.com/documentation/authenticationservices/implementing-user-authentication-with-sign-in-with-apple)  
Untuk mengintegrasikan Masuk dengan Apple di platform selain iOS native, lihat [ JS Masuk dengan Apple.](https://developer.apple.com/documentation/signinwithapplejs/) 

## Konfigurasikan penyedia eksternal di konsol identitas gabungan Amazon Cognito
<a name="login-with-apple-configure-provider"></a>

Gunakan prosedur berikut untuk mengonfigurasi penyedia eksternal Anda.

**Untuk menambahkan Masuk dengan penyedia identitas Apple (iDP)**

1. Pilih **kumpulan Identitas** dari konsol [Amazon Cognito](https://console.aws.amazon.com/cognito/home). Pilih kumpulan identitas.

1. Pilih tab **Akses pengguna**.

1. Pilih **Tambahkan penyedia identitas**.

1. Pilih **Masuk dengan Apple**.

1. Masukkan **ID Layanan** OAuth proyek yang Anda buat dengan [Apple Developer](https://developer.apple.com). Untuk informasi selengkapnya, lihat [Mengautentikasi pengguna dengan Masuk dengan Apple](https://developer.apple.com/documentation/signinwithapple/authenticating-users-with-sign-in-with-apple) *Masuk dengan Dokumentasi Apple*.

1. **Untuk menyetel peran yang diminta Amazon Cognito saat mengeluarkan kredensil kepada pengguna yang telah mengautentikasi dengan penyedia ini, konfigurasikan setelan Peran.**

   1. Anda dapat menetapkan pengguna dari IDP tersebut peran **Default** yang Anda atur saat mengonfigurasi peran **Terautentikasi, atau Anda** **dapat Memilih** peran dengan aturan.

     1. Jika Anda memilih **Pilih peran dengan aturan**, masukkan **Klaim** sumber dari autentikasi pengguna Anda, **Operator** yang ingin Anda bandingkan dengan klaim, **Nilai** yang akan menyebabkan kecocokan dengan pilihan peran ini, dan **Peran** yang ingin Anda tetapkan saat **penetapan Peran** cocok. Pilih **Tambahkan yang lain** untuk membuat aturan tambahan berdasarkan kondisi yang berbeda.

     1. Pilih **Resolusi Peran**. **Jika klaim pengguna tidak sesuai dengan aturan, Anda dapat menolak kredensil atau mengeluarkan kredensi untuk peran yang Diautentikasi.**

1. **Untuk mengubah tag utama yang ditetapkan Amazon Cognito saat mengeluarkan kredensil kepada pengguna yang telah diautentikasi dengan penyedia ini, konfigurasikan Atribut untuk kontrol akses.**

   1. Untuk tidak menerapkan tag utama, pilih **Tidak aktif**.

   1. Untuk menerapkan tag utama berdasarkan `sub` dan `aud` klaim, pilih **Gunakan pemetaan default**.

   1. Untuk membuat skema atribut kustom Anda sendiri ke tag utama, pilih **Gunakan pemetaan khusus**. Kemudian masukkan **kunci Tag** yang ingin Anda sumber dari setiap **Klaim** yang ingin Anda wakili dalam tag.

1. Pilih **Simpan perubahan**.

## Masuk dengan Apple sebagai penyedia dalam contoh CLI identitas federasi Amazon Cognito
<a name="sign-in-with-apple-cli-examples"></a>

Contoh ini membuat kumpulan identitas bernama `MyIdentityPool` dengan Masuk dengan Apple sebagai iDP.

`aws cognito-identity create-identity-pool --identity-pool-name MyIdentityPool --supported-login-providers appleid.apple.com="sameple.apple.clientid"`

 Untuk informasi selengkapnya, lihat [Membuat kolam identitas](https://docs.aws.amazon.com/cli/latest/reference/cognito-identity/create-identity-pool.html) 

**Menghasilkan sebuah ID identitas Amazon Cognito**  
 Contoh ini menghasilkan (atau mengambil) ID Amazon Cognito. Ini adalah API publik sehingga Anda tidak perlu kredensial apa pun untuk memanggil API ini.

`aws cognito-identity get-id --identity-pool-id SampleIdentityPoolId --logins appleid.apple.com="SignInWithAppleIdToken"`

Untuk informasi lebih lanjut, lihat [get-id.](https://docs.aws.amazon.com/cli/latest/reference/cognito-identity/get-id.html) 

**Mendapatkan kredensial untuk ID identitas Amazon Cognito**  
Contoh ini mengembalikan kredensial untuk ID identitas yang diberikan dan Masuk dengan login Apple. Ini adalah API publik sehingga Anda tidak perlu kredensial apa pun untuk memanggil API ini.

`aws cognito-identity get-credentials-for-identity --identity-id SampleIdentityId --logins appleid.apple.com="SignInWithAppleIdToken" `

Untuk informasi selengkapnya, lihat [get-credentials-for-identity](https://docs.aws.amazon.com/cli/latest/reference/cognito-identity/get-credentials-for-identity.html) 

## Menggunakan Masuk dengan Apple: Android
<a name="set-up-apple-1.android"></a>

Apple tidak menyediakan SDK yang mendukung Masuk dengan Apple untuk Android. Anda dapat menggunakan alur web dalam tampilan web sebagai gantinya.
+ Untuk mengonfigurasi Masuk dengan Apple di aplikasi anda, ikuti [Mengonfigurasi halaman Web Anda untuk Masuk dengan Apple](https://developer.apple.com/documentation/signinwithapple/configuring-your-webpage-for-sign-in-with-apple) dalam dokumentasi Apple.
+ Untuk menambahkan tombol **Masuk dengan Apple** ke antarmuka pengguna Android Anda, ikuti [tombol Menampilkan Masuk dengan Apple di web](https://developer.apple.com/documentation/signinwithapple/displaying-sign-in-with-apple-buttons-on-the-web) dalam dokumentasi Apple.
+ Untuk mengautentikasi pengguna dengan aman dengan Masuk dengan Apple, ikuti [Mengautentikasi Pengguna dengan Masuk dengan Apple di dokumentasi Apple](https://developer.apple.com/documentation/signinwithapple/authenticating-users-with-sign-in-with-apple).

Masuk dengan Apple menggunakan objek sesi untuk melacak keadaannya. Amazon Cognito menggunakan token ID dari objek sesi ini untuk mengautentikasi pengguna, menghasilkan pengenal unik, dan, jika diperlukan, memberikan pengguna akses ke sumber daya lain. AWS 

```
@Override
public void onSuccess(Bundle response) {
    String token = response.getString("id_token");
    Map<String, String> logins = new HashMap<String, String>();
    logins.put("appleid.apple.com", token);
    credentialsProvider.setLogins(logins);
}
```

## Menggunakan Masuk dengan Apple: iOS - Objective-C
<a name="set-up-apple-1.ios-objc"></a>

Apple menyediakan dukungan SDK untuk Masuk dengan Apple di aplikasi iOS native. Untuk menerapkan autentikasi pengguna dengan Masuk dengan Apple di perangkat iOS native, ikuti [Menerapkan Autentikasi Pengguna dengan Masuk dengan Apple](https://developer.apple.com/documentation/authenticationservices/implementing-user-authentication-with-sign-in-with-apple) dalam dokumentasi Apple.

Amazon Cognito menggunakan token ID untuk mengautentikasi pengguna, menghasilkan pengenal unik, dan, jika diperlukan, memberikan pengguna akses ke sumber daya lain. AWS 

```
(void)finishedWithAuth: (ASAuthorizationAppleIDCredential *)auth error: (NSError *) error {
        NSString *idToken = [ASAuthorizationAppleIDCredential objectForKey:@"identityToken"];
        credentialsProvider.logins = @{ "appleid.apple.com": idToken };
    }
```

## Menggunakan Masuk dengan Apple: iOS - Swift
<a name="set-up-apple-1.ios-swift"></a>

Apple menyediakan dukungan SDK untuk Masuk dengan Apple di aplikasi iOS native. Untuk menerapkan autentikasi pengguna dengan Masuk dengan Apple di perangkat iOS native, ikuti [Menerapkan Autentikasi Pengguna dengan Masuk dengan Apple](https://developer.apple.com/documentation/authenticationservices/implementing-user-authentication-with-sign-in-with-apple) dalam dokumentasi Apple.

Amazon Cognito menggunakan token ID untuk mengautentikasi pengguna, menghasilkan pengenal unik, dan, jika diperlukan, memberikan pengguna akses ke sumber daya lain. AWS 

Untuk informasi selengkapnya tentang cara mengatur Masuk dengan Apple di iOS, lihat [Mengatur Masuk dengan Apple](https://docs.amplify.aws/sdk/auth/federated-identities/q/platform/ios#set-up-sign-in-with-apple)

```
func finishedWithAuth(auth: ASAuthorizationAppleIDCredential!, error: NSError!) {
    if error != nil {
      print(error.localizedDescription)
    }
    else {
      let idToken = auth.identityToken,
      credentialsProvider.logins = ["appleid.apple.com": idToken!]
    }
}
```

## Gunakan Masuk dengan Apple: JavaScript
<a name="set-up-apple-1.javascript"></a>

Apple tidak menyediakan SDK yang mendukung Masuk dengan Apple untuk JavaScript. Anda dapat menggunakan alur web dalam tampilan web sebagai gantinya.
+ Untuk mengonfigurasi Masuk dengan Apple di aplikasi anda, ikuti [Mengonfigurasi halaman Web Anda untuk Masuk dengan Apple](https://developer.apple.com/documentation/signinwithapple/configuring-your-webpage-for-sign-in-with-apple) dalam dokumentasi Apple.
+ Untuk menambahkan tombol **Masuk dengan Apple** ke antarmuka JavaScript pengguna, ikuti [tombol Menampilkan Masuk dengan Apple di web](https://developer.apple.com/documentation/signinwithapple/displaying-sign-in-with-apple-buttons-on-the-web) dalam dokumentasi Apple.
+ Untuk mengautentikasi pengguna dengan aman dengan Masuk dengan Apple, ikuti [Mengautentikasi Pengguna dengan Masuk dengan Apple di dokumentasi Apple](https://developer.apple.com/documentation/signinwithapple/authenticating-users-with-sign-in-with-apple).

Masuk dengan Apple menggunakan objek sesi untuk melacak keadaannya. Amazon Cognito menggunakan token ID dari objek sesi ini untuk mengautentikasi pengguna, menghasilkan pengenal unik, dan, jika diperlukan, memberikan pengguna akses ke sumber daya lain. AWS 

```
function signinCallback(authResult) {
     // Add the apple's id token to the Amazon Cognito credentials login map.
     AWS.config.credentials = new AWS.CognitoIdentityCredentials({
        IdentityPoolId: 'IDENTITY_POOL_ID',
        Logins: {
           'appleid.apple.com': authResult['id_token']
        }
     });

     // Obtain AWS credentials
     AWS.config.credentials.get(function(){
        // Access AWS resources here.
     });
}
```

# Menyiapkan penyedia OIDC sebagai idP kumpulan identitas
<a name="open-id"></a>

[OpenID Connect](http://openid.net/connect/) adalah standar terbuka untuk otentikasi yang didukung oleh sejumlah penyedia login. Dengan Amazon Cognito, Anda dapat menautkan identitas dengan penyedia OpenID Connect yang Anda konfigurasikan. [AWS Identity and Access Management](https://aws.amazon.com/iam/)

**Menambahkan penyedia OpenID Connect**

*Untuk informasi tentang cara membuat penyedia OpenID Connect, lihat Membuat penyedia [identitas OpenID Connect (OIDC)](https://docs.aws.amazon.com/IAM/latest/UserGuide/identity-providers-oidc.html) di Panduan Pengguna.AWS Identity and Access Management *

**Mengaitkan penyedia dengan Amazon Cognito**

**Untuk menambahkan penyedia identitas OIDC (iDP)**

1. Pilih **kumpulan Identitas** dari konsol [Amazon Cognito](https://console.aws.amazon.com/cognito/home). Pilih kumpulan identitas.

1. Pilih tab **Akses pengguna**.

1. Pilih **Tambahkan penyedia identitas**.

1. Pilih **OpenID Connect (OIDC**).

1. Pilih **penyedia identitas OIDC** dari IAM IdPs di Anda. Akun AWS Jika Anda ingin menambahkan penyedia SAMP baru, pilih **Buat penyedia baru** untuk menavigasi ke konsol IAM.

1. **Untuk menyetel peran yang diminta Amazon Cognito saat mengeluarkan kredensil kepada pengguna yang telah mengautentikasi dengan penyedia ini, konfigurasikan setelan Peran.**

   1. Anda dapat menetapkan pengguna dari IDP tersebut peran **Default** yang Anda atur saat mengonfigurasi peran **Terautentikasi, atau Anda** **dapat Memilih** peran dengan aturan.

     1. Jika Anda memilih **Pilih peran dengan aturan**, masukkan **Klaim** sumber dari autentikasi pengguna Anda, **Operator** yang ingin Anda bandingkan dengan klaim, **Nilai** yang akan menyebabkan kecocokan dengan pilihan peran ini, dan **Peran** yang ingin Anda tetapkan saat **penetapan Peran** cocok. Pilih **Tambahkan yang lain** untuk membuat aturan tambahan berdasarkan kondisi yang berbeda.

     1. Pilih **Resolusi Peran**. **Jika klaim pengguna tidak sesuai dengan aturan, Anda dapat menolak kredensil atau mengeluarkan kredensi untuk peran yang Diautentikasi.**

1. **Untuk mengubah tag utama yang ditetapkan Amazon Cognito saat mengeluarkan kredensil kepada pengguna yang telah diautentikasi dengan penyedia ini, konfigurasikan Atribut untuk kontrol akses.**

   1. Untuk tidak menerapkan tag utama, pilih **Tidak aktif**.

   1. Untuk menerapkan tag utama berdasarkan `sub` dan `aud` klaim, pilih **Gunakan pemetaan default**.

   1. Untuk membuat skema atribut kustom Anda sendiri ke tag utama, pilih **Gunakan pemetaan khusus**. Kemudian masukkan **kunci Tag** yang ingin Anda sumber dari setiap **Klaim** yang ingin Anda wakili dalam tag.

1. Pilih **Simpan perubahan**.

Anda dapat mengaitkan beberapa penyedia OpenID Connect dengan kolam identitas tunggal.

**Menggunakan OpenID Connect**

Lihat dokumentasi penyedia Anda untuk mengetahui cara masuk dan menerima token ID.

Setelah Anda memiliki token, tambahkan token ke peta login. Gunakan URI penyedia Anda sebagai kuncinya.

**Memvalidasi token OpenID Connect**

Saat pertama kali berintegrasi dengan Amazon Cognito, Anda mungkin menerima pengecualian`InvalidToken`. Penting untuk memahami bagaimana Amazon Cognito memvalidasi token OpenID Connect (OIDC).

**catatan**  
Seperti yang ditentukan di sini ([https://tools.ietf.org/html/rfc7523),](https://tools.ietf.org/html/rfc7523) Amazon Cognito memberikan masa tenggang 5 menit untuk menangani kemiringan jam antar sistem.

1. `iss`Parameter harus cocok dengan kunci yang digunakan peta login (seperti login.provider.com).

1. Tanda tangan harus valid. Tanda tangan harus dapat diverifikasi melalui kunci publik RSA.
**catatan**  
Identity pool mempertahankan cache dari kunci penandatanganan IDP OIDC untuk waktu yang singkat. Jika penyedia Anda mengubah kunci penandatanganan mereka, Amazon Cognito mungkin menampilkan `NoKeyFound` kesalahan hingga cache ini diperbarui. Jika Anda mengalami kesalahan ini, tunggu sekitar sepuluh menit hingga kumpulan identitas Anda menyegarkan kunci penandatanganan.

1. Sidik jari kunci publik sertifikat cocok dengan sidik jari yang Anda tetapkan di IAM saat Anda membuat penyedia OIDC Anda.

1. Jika `azp` parameter ada, periksa nilai ini terhadap klien yang terdaftar IDs di penyedia OIDC Anda.

1. Jika `azp` parameter tidak ada, periksa `aud` parameter terhadap klien yang terdaftar IDs di penyedia OIDC Anda.

Situs web [jwt.io](http://jwt.io/) adalah sumber daya berharga yang dapat Anda gunakan untuk memecahkan kode token dan memverifikasi nilai-nilai ini.

## Android
<a name="set-up-open-id-1.android"></a>

```
Map<String, String> logins = new HashMap<String, String>();
logins.put("login.provider.com", token);
credentialsProvider.setLogins(logins);
```

## iOS - Objective-C
<a name="set-up-open-id-1.ios-objc"></a>

```
credentialsProvider.logins = @{ "login.provider.com": token }
```

## JavaScript
<a name="set-up-open-id-1.javascript"></a>

```
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
 IdentityPoolId: 'IDENTITY_POOL_ID',
 Logins: {
    'login.provider.com': token
 }
});
```

# Menyiapkan penyedia SAMP sebagai idP kumpulan identitas
<a name="saml-identity-provider"></a>

Dengan kumpulan identitas Amazon Cognito, Anda dapat mengautentikasi pengguna dengan penyedia identitas (IdPs) melalui SAMP 2.0. Anda dapat menggunakan iDP yang mendukung SAMP dengan Amazon Cognito untuk menyediakan alur orientasi sederhana bagi pengguna Anda. IDP pendukung SAML Anda menentukan peran IAM yang dapat diasumsikan oleh pengguna Anda. Dengan cara ini, pengguna yang berbeda dapat menerima set izin yang berbeda.

## Mengonfigurasi kumpulan identitas Anda untuk IDP SAMP
<a name="configure-identity-pool-saml-provider"></a>

Langkah-langkah berikut menjelaskan cara mengonfigurasi kumpulan identitas Anda untuk menggunakan IDP berbasis SAML.

**catatan**  
[Sebelum Anda mengonfigurasi kumpulan identitas Anda untuk mendukung penyedia SAMP, pertama-tama konfigurasikan IDP SAMP di konsol IAM.](https://console.aws.amazon.com/iam) Untuk informasi lebih lanjut, lihat [Mengintegrasikan penyedia solusi SAML pihak ketiga dengan AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_saml_3rd-party.html) di *Panduan Pengguna IAM*.

**Untuk menambahkan penyedia identitas SAMP (IDP)**

1. Pilih **kumpulan Identitas** dari konsol [Amazon Cognito](https://console.aws.amazon.com/cognito/home). Pilih kumpulan identitas.

1. Pilih tab **Akses pengguna**.

1. Pilih **Tambahkan penyedia identitas**.

1. Pilih **SAML**.

1. Pilih **penyedia identitas SAMP** dari IAM IdPs di Anda. Akun AWS Jika Anda ingin menambahkan penyedia SAMP baru, pilih **Buat penyedia baru** untuk menavigasi ke konsol IAM.

1. **Untuk menyetel peran yang diminta Amazon Cognito saat mengeluarkan kredensil kepada pengguna yang telah mengautentikasi dengan penyedia ini, konfigurasikan setelan Peran.**

   1. Anda dapat menetapkan pengguna dari IDP tersebut peran **Default** yang Anda atur saat mengonfigurasi peran **Terautentikasi, atau Anda** **dapat Memilih** peran dengan aturan.

     1. Jika Anda memilih **Pilih peran dengan aturan**, masukkan **Klaim** sumber dari autentikasi pengguna Anda, **Operator** yang ingin Anda bandingkan dengan klaim, **Nilai** yang akan menyebabkan kecocokan dengan pilihan peran ini, dan **Peran** yang ingin Anda tetapkan saat **penetapan Peran** cocok. Pilih **Tambahkan yang lain** untuk membuat aturan tambahan berdasarkan kondisi yang berbeda.

     1. Pilih **Resolusi Peran**. **Jika klaim pengguna tidak sesuai dengan aturan, Anda dapat menolak kredensil atau mengeluarkan kredensi untuk peran yang Diautentikasi.**

1. **Untuk mengubah tag utama yang ditetapkan Amazon Cognito saat mengeluarkan kredensil kepada pengguna yang telah diautentikasi dengan penyedia ini, konfigurasikan Atribut untuk kontrol akses.**

   1. Untuk tidak menerapkan tag utama, pilih **Tidak aktif**.

   1. Untuk menerapkan tag utama berdasarkan `sub` dan `aud` klaim, pilih **Gunakan pemetaan default**.

   1. Untuk membuat skema atribut kustom Anda sendiri ke tag utama, pilih **Gunakan pemetaan khusus**. Kemudian masukkan **kunci Tag** yang ingin Anda sumber dari setiap **Klaim** yang ingin Anda wakili dalam tag.

1. Pilih **Simpan perubahan**.

## Mengkonfigurasi IDP SALL Anda
<a name="configure-your-saml-identity-provider"></a>

Setelah Anda membuat penyedia SAMP, konfigurasikan IDP SAMP Anda untuk menambahkan kepercayaan pihak yang bergantung antara IDP Anda dan. AWS Dengan banyak IdPs, Anda dapat menentukan URL yang dapat digunakan IDP untuk membaca informasi dan sertifikat pihak yang bergantung dari dokumen XHTML. Untuk AWS, Anda dapat menggunakan [https://signin.aws.amazon.com/static/saml-metadata.xml](https://signin.aws.amazon.com/static/saml-metadata.xml). Langkah selanjutnya adalah mengonfigurasi respons pernyataan SAMP dari IDP Anda untuk mengisi klaim yang diperlukan. AWS Untuk detail tentang konfigurasi klaim, lihat [Mengonfigurasi pernyataan SAML untuk respons autentikasi](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers_create_saml_assertions.html).

Jika IDP SALL Anda menyertakan lebih dari satu sertifikat penandatanganan dalam metadata SAMP, saat login, kumpulan identitas Anda menentukan bahwa pernyataan SAMP valid jika cocok dengan sertifikat apa pun dalam metadata SAMP.

## Menyesuaikan peran pengguna Anda dengan SAMP
<a name="role-customization-saml"></a>

Saat Anda menggunakan SAMP dengan Amazon Cognito Identity, Anda dapat menyesuaikan peran untuk pengguna akhir. Amazon Cognito hanya mendukung [aliran yang disempurnakan dengan IDP](authentication-flow.md) berbasis SAML. Anda tidak perlu menentukan peran yang diautentikasi atau tidak diautentikasi agar kumpulan identitas menggunakan IDP berbasis SAML. Atribut klaim `https://aws.amazon.com/SAML/Attributes/Role` menentukan satu atau lebih pasangan peran yang dipisahkan koma dan ARN penyedia. Ini adalah peran yang dapat diasumsikan pengguna. Anda dapat mengonfigurasi IDP SAMP untuk mengisi atribut peran berdasarkan informasi atribut pengguna yang tersedia dari iDP. Jika Anda menerima beberapa peran dalam pernyataan SAMP, isi `customRoleArn` parameter opsional saat Anda menelepon. `getCredentialsForIdentity` Pengguna mengasumsikan ini `customRoleArn` jika peran cocok dengan satu dalam klaim dalam pernyataan SAMP.

## Mengautentikasi pengguna dengan SAMP iDP
<a name="authenticate-user-with-saml"></a>

Untuk bergabung dengan IDP berbasis SAML, tentukan URL tempat pengguna memulai login. AWS federasi menggunakan login yang diprakarsai IDP. Di AD FS 2.0, URL mengambil bentuk`https://<fqdn>/adfs/ls/IdpInitiatedSignOn.aspx?loginToRp=urn:amazon:webservices`.

Untuk menambahkan dukungan untuk IDP SAMP Anda di Amazon Cognito, pertama-tama autentikasi pengguna dengan penyedia identitas SAMP Anda dari aplikasi iOS atau Android Anda. Kode yang Anda gunakan untuk mengintegrasikan dan mengautentikasi dengan SAMP iDP khusus untuk penyedia SAMP. Setelah mengautentikasi pengguna, Anda dapat menggunakan Amazon APIs Cognito untuk memberikan pernyataan SAMP yang dihasilkan ke Identitas Amazon Cognito.

Anda tidak dapat mengulangi, atau *memutar ulang*, pernyataan SAMP di `Logins` peta permintaan API kumpulan identitas Anda. Pernyataan SAMP yang diputar ulang memiliki ID pernyataan yang menduplikasi ID permintaan API sebelumnya. Operasi API yang dapat menerima pernyataan SAMP di `Logins` peta termasuk [GetId](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_GetId.html),, [GetCredentialsForIdentity](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_GetCredentialsForIdentity.html), [GetOpenIdToken](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_GetOpenIdToken.html)dan. [GetOpenIDTokenForDeveloperIdentity](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_GetOpenIdTokenForDeveloperIdentity.html) Anda dapat memutar ulang ID pernyataan SAMP satu kali per permintaan API dalam alur otentikasi kumpulan identitas. Misalnya, Anda dapat memberikan pernyataan SAMP yang sama dalam `GetId` permintaan dan permintaan berikutnya, tetapi tidak dalam `GetCredentialsForIdentity` permintaan kedua. `GetId`

# Identitas yang diautentikasi pengembang
<a name="developer-authenticated-identities"></a>

Amazon Cognito mendukung identitas yang diautentikasi pengembang, selain federasi identitas web melalui,,, dan. [Menyiapkan Facebook sebagai kumpulan identitas IDP](facebook.md) [Menyiapkan Google sebagai kumpulan identitas iDP](google.md) [Menyiapkan Login with Amazon sebagai kumpulan identitas IDP](amazon.md) [Menyiapkan Masuk dengan Apple sebagai kumpulan identitas iDP](apple.md) Dengan identitas yang diautentikasi pengembang, Anda dapat mendaftarkan dan mengautentikasi pengguna melalui proses autentikasi yang ada, sambil tetap menggunakan Amazon Cognito untuk menyinkronkan data pengguna dan mengakses sumber daya. AWS Menggunakan identitas yang diautentikasi pengembang melibatkan interaksi antara perangkat pengguna akhir, backend Anda untuk autentikasi, dan Amazon Cognito. Untuk detail selengkapnya, lihat [Memahami Otentikasi Amazon Cognito Bagian 2: Identitas Terautentikasi Pengembang](https://aws.amazon.com/blogs/mobile/understanding-amazon-cognito-authentication-part-2-developer-authenticated-identities/) di blog. AWS 

## Memahami alur otentikasi
<a name="understanding-the-authentication-flow"></a>

Operasi [GetOpenIdTokenForDeveloperIdentity](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_GetOpenIdTokenForDeveloperIdentity.html)API dapat memulai otentikasi pengembang untuk otentikasi yang ditingkatkan dan dasar. API ini mengautentikasi permintaan dengan kredensi administratif. `Logins`Peta adalah nama penyedia pengembang kumpulan identitas seperti `login.mydevprovider` dipasangkan dengan pengenal kustom.

Contoh:

```
"Logins": {
        "login.mydevprovider": "my developer identifier"
    }
```

**Otentikasi yang disempurnakan**

Panggil operasi [GetCredentialsForIdentity](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_GetCredentialsForIdentity.html)API dengan `Logins` peta dengan nama `cognito-identity.amazonaws.com` dan nilai token dari`GetOpenIdTokenForDeveloperIdentity`.

Contoh:

```
"Logins": {
        "cognito-identity.amazonaws.com": "eyJra12345EXAMPLE"
    }
```

`GetCredentialsForIdentity`dengan identitas yang diautentikasi pengembang mengembalikan kredensitas sementara untuk peran default yang diautentikasi dari kumpulan identitas.

**Otentikasi dasar**

Panggil operasi [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)API dan minta peran IAM apa pun yang memiliki [hubungan kepercayaan yang sesuai yang ditentukan](iam-roles.md#role-trust-and-permissions). `RoleArn` Tetapkan nilai `WebIdentityToken` ke token yang diperoleh dari`GetOpenIdTokenForDeveloperIdentity`.

Untuk informasi tentang authflow identitas yang diautentikasi pengembang dan perbedaannya dari identitas penyedia eksternal, lihat. [Aliran otentikasi kumpulan identitas](authentication-flow.md)

## Tentukan nama penyedia pengembang dan kaitkan dengan kumpulan identitas
<a name="associate-developer-provider"></a>

Untuk menggunakan identitas yang diautentikasi pengembang, Anda memerlukan kumpulan identitas yang terkait dengan penyedia pengembang Anda. Untuk melakukannya, ikuti langkah-langkah berikut:

**Untuk menambahkan penyedia pengembang khusus**

1. Pilih **kumpulan Identitas** dari konsol [Amazon Cognito](https://console.aws.amazon.com/cognito/home). Pilih kumpulan identitas.

1. Pilih tab **Akses pengguna**.

1. Pilih **Tambahkan penyedia identitas**.

1. Pilih **Penyedia pengembang khusus**.

1. Masukkan **nama penyedia Pengembang**. Anda tidak dapat mengubah atau menghapus penyedia pengembang setelah menambahkannya.

1. Pilih **Simpan perubahan**.

Catatan: Setelah nama penyedia telah diatur, itu tidak dapat diubah.

## Menerapkan penyedia identitas
<a name="implement-an-identity-provider"></a>

### Android
<a name="implement-id-provider-1.android"></a>

Untuk menggunakan identitas yang diautentikasi pengembang, terapkan kelas penyedia identitas Anda sendiri yang diperluas. `AWSAbstractCognitoIdentityProvider` Kelas penyedia identitas Anda harus mengembalikan objek respons yang berisi token sebagai atribut.

Berikut ini adalah contoh dasar dari penyedia identitas.

```
public class DeveloperAuthenticationProvider extends AWSAbstractCognitoDeveloperIdentityProvider {

  private static final String developerProvider = "<Developer_provider_name>";

  public DeveloperAuthenticationProvider(String accountId, String identityPoolId, Regions region) {
    super(accountId, identityPoolId, region);
    // Initialize any other objects needed here.
  }

  // Return the developer provider name which you choose while setting up the
  // identity pool in the &COG; Console

  @Override
  public String getProviderName() {
    return developerProvider;
  }

  // Use the refresh method to communicate with your backend to get an
  // identityId and token.

  @Override
  public String refresh() {

    // Override the existing token
    setToken(null);

    // Get the identityId and token by making a call to your backend
    // (Call to your backend)

    // Call the update method with updated identityId and token to make sure
    // these are ready to be used from Credentials Provider.

    update(identityId, token);
    return token;

  }

  // If the app has a valid identityId return it, otherwise get a valid
  // identityId from your backend.

  @Override
  public String getIdentityId() {

    // Load the identityId from the cache
    identityId = cachedIdentityId;

    if (identityId == null) {
       // Call to your backend
    } else {
       return identityId;
    }

  }
}
```

Untuk menggunakan penyedia identitas ini, Anda harus meneruskannya ke `CognitoCachingCredentialsProvider`. Inilah contohnya:

```
DeveloperAuthenticationProvider developerProvider = new DeveloperAuthenticationProvider( null, "IDENTITYPOOLID", context, Regions.USEAST1);
CognitoCachingCredentialsProvider credentialsProvider = new CognitoCachingCredentialsProvider( context, developerProvider, Regions.USEAST1);
```

### iOS - Objektif-C
<a name="implement-id-provider-1.ios-objc"></a>

Untuk menggunakan identitas yang diautentikasi pengembang, terapkan kelas penyedia identitas Anda sendiri yang diperluas. [AWSCognitoCredentialsProviderHelper](https://github.com/aws-amplify/aws-sdk-ios) Kelas penyedia identitas Anda harus mengembalikan objek respons yang berisi token sebagai atribut.

```
@implementation DeveloperAuthenticatedIdentityProvider
/*
 * Use the token method to communicate with your backend to get an
 * identityId and token.
 */

- (AWSTask <NSString*> *) token {
    //Write code to call your backend:
    //Pass username/password to backend or some sort of token to authenticate user
    //If successful, from backend call getOpenIdTokenForDeveloperIdentity with logins map 
    //containing "your.provider.name":"enduser.username"
    //Return the identity id and token to client
    //You can use AWSTaskCompletionSource to do this asynchronously

    // Set the identity id and return the token
    self.identityId = response.identityId;
    return [AWSTask taskWithResult:response.token];
}

@end
```

Untuk menggunakan penyedia identitas ini, teruskan itu ke `AWSCognitoCredentialsProvider` seperti yang ditunjukkan dalam contoh berikut:

```
DeveloperAuthenticatedIdentityProvider * devAuth = [[DeveloperAuthenticatedIdentityProvider alloc] initWithRegionType:AWSRegionYOUR_IDENTITY_POOL_REGION 
                                         identityPoolId:@"YOUR_IDENTITY_POOL_ID"
                                        useEnhancedFlow:YES
                                identityProviderManager:nil];
AWSCognitoCredentialsProvider *credentialsProvider = [[AWSCognitoCredentialsProvider alloc]
                                                          initWithRegionType:AWSRegionYOUR_IDENTITY_POOL_REGION
                                                          identityProvider:devAuth];
```

Jika Anda ingin mendukung identitas yang tidak diautentikasi dan identitas yang diautentikasi pengembang, ganti metode dalam implementasi Anda. `logins` `AWSCognitoCredentialsProviderHelper`

```
- (AWSTask<NSDictionary<NSString *, NSString *> *> *)logins {
    if(/*logic to determine if user is unauthenticated*/) {
        return [AWSTask taskWithResult:nil];
    }else{
        return [super logins];
    }
}
```

Jika Anda ingin mendukung identitas dan penyedia sosial yang diautentikasi pengembang, Anda harus mengelola siapa penyedia saat ini dalam implementasi Anda. `logins` `AWSCognitoCredentialsProviderHelper`

```
- (AWSTask<NSDictionary<NSString *, NSString *> *> *)logins {
    if(/*logic to determine if user is unauthenticated*/) {
        return [AWSTask taskWithResult:nil];
    }else if (/*logic to determine if user is Facebook*/){
        return [AWSTask taskWithResult: @{ AWSIdentityProviderFacebook : [FBSDKAccessToken currentAccessToken] }];
    }else {
        return [super logins];
    }
}
```

### iOS - cepat
<a name="implement-id-provider-1.ios-swift"></a>

Untuk menggunakan identitas yang diautentikasi pengembang, terapkan kelas penyedia identitas Anda sendiri yang diperluas. [AWSCognitoCredentialsProviderHelper](https://github.com/aws-amplify/aws-sdk-ios) Kelas penyedia identitas Anda harus mengembalikan objek respons yang berisi token sebagai atribut.

```
import AWSCore
/*
 * Use the token method to communicate with your backend to get an
 * identityId and token.
 */
class DeveloperAuthenticatedIdentityProvider : AWSCognitoCredentialsProviderHelper {
    override func token() -> AWSTask<NSString> {
    //Write code to call your backend:
    //pass username/password to backend or some sort of token to authenticate user, if successful, 
    //from backend call getOpenIdTokenForDeveloperIdentity with logins map containing "your.provider.name":"enduser.username"
    //return the identity id and token to client
    //You can use AWSTaskCompletionSource to do this asynchronously

    // Set the identity id and return the token
    self.identityId = resultFromAbove.identityId
    return AWSTask(result: resultFromAbove.token)
}
```

Untuk menggunakan penyedia identitas ini, teruskan itu ke `AWSCognitoCredentialsProvider` seperti yang ditunjukkan dalam contoh berikut:

```
let devAuth = DeveloperAuthenticatedIdentityProvider(regionType: .YOUR_IDENTITY_POOL_REGION, identityPoolId: "YOUR_IDENTITY_POOL_ID", useEnhancedFlow: true, identityProviderManager:nil)
let credentialsProvider = AWSCognitoCredentialsProvider(regionType: .YOUR_IDENTITY_POOL_REGION, identityProvider:devAuth)
let configuration = AWSServiceConfiguration(region: .YOUR_IDENTITY_POOL_REGION, credentialsProvider:credentialsProvider)
AWSServiceManager.default().defaultServiceConfiguration = configuration
```

Jika Anda ingin mendukung identitas yang tidak diautentikasi dan identitas yang diautentikasi pengembang, ganti metode dalam implementasi Anda. `logins` `AWSCognitoCredentialsProviderHelper`

```
override func logins () -> AWSTask<NSDictionary> {
    if(/*logic to determine if user is unauthenticated*/) {
        return AWSTask(result:nil)
    }else {
        return super.logins()
    }
}
```

Jika Anda ingin mendukung identitas dan penyedia sosial yang diautentikasi pengembang, Anda harus mengelola siapa penyedia saat ini dalam implementasi Anda. `logins` `AWSCognitoCredentialsProviderHelper`

```
override func logins () -> AWSTask<NSDictionary> {
    if(/*logic to determine if user is unauthenticated*/) {
        return AWSTask(result:nil)
    }else if (/*logic to determine if user is Facebook*/){
        if let token = AccessToken.current?.authenticationToken {
            return AWSTask(result: [AWSIdentityProviderFacebook:token])
        }
        return AWSTask(error:NSError(domain: "Facebook Login", code: -1 , userInfo: ["Facebook" : "No current Facebook access token"]))
    }else {
        return super.logins()
    }
}
```

### JavaScript
<a name="implement-id-provider-1.javascript"></a>

Setelah Anda mendapatkan ID identitas dan token sesi dari backend Anda, Anda akan meneruskannya ke penyedia. `AWS.CognitoIdentityCredentials` Inilah contohnya.

```
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
   IdentityPoolId: 'IDENTITY_POOL_ID',
   IdentityId: 'IDENTITY_ID_RETURNED_FROM_YOUR_PROVIDER',
   Logins: {
      'cognito-identity.amazonaws.com': 'TOKEN_RETURNED_FROM_YOUR_PROVIDER'
   }
});
```

### Unity
<a name="implement-id-provider-1.unity"></a>

Untuk menggunakan identitas yang diautentikasi pengembang, Anda harus memperluas `CognitoAWSCredentials` dan mengganti `RefreshIdentity` metode untuk mengambil id identitas pengguna dan token dari backend Anda dan mengembalikannya. Berikut ini adalah contoh sederhana dari penyedia identitas yang akan menghubungi backend hipotetis di 'example.com':

```
using UnityEngine;
using System.Collections;
using Amazon.CognitoIdentity;
using System.Collections.Generic;
using ThirdParty.Json.LitJson;
using System;
using System.Threading;

public class DeveloperAuthenticatedCredentials : CognitoAWSCredentials
{
    const string PROVIDER_NAME = "example.com";
    const string IDENTITY_POOL = "IDENTITY_POOL_ID";
    static readonly RegionEndpoint REGION = RegionEndpoint.USEast1;

    private string login = null;

    public DeveloperAuthenticatedCredentials(string loginAlias)
        : base(IDENTITY_POOL, REGION)
    {
        login = loginAlias;
    }

    protected override IdentityState RefreshIdentity()
    {
        IdentityState state = null;
        ManualResetEvent waitLock = new ManualResetEvent(false);
        MainThreadDispatcher.ExecuteCoroutineOnMainThread(ContactProvider((s) =>
        {
            state = s;
            waitLock.Set();
        }));
        waitLock.WaitOne();
        return state;
    }

    IEnumerator ContactProvider(Action<IdentityState> callback)
    {
        WWW www = new WWW("http://example.com/?username="+login);
        yield return www;
        string response = www.text;

        JsonData json = JsonMapper.ToObject(response);

        //The backend has to send us back an Identity and a OpenID token
        string identityId = json["IdentityId"].ToString();
        string token = json["Token"].ToString();

        IdentityState state = new IdentityState(identityId, PROVIDER_NAME, token, false);
        callback(state);
    }
}
```

Kode di atas menggunakan objek operator thread untuk memanggil coroutine. Jika Anda tidak memiliki cara untuk melakukan ini di proyek Anda, Anda dapat menggunakan skrip berikut dalam scene Anda:

```
using System;
using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public class MainThreadDispatcher : MonoBehaviour
{
    static Queue<IEnumerator> _coroutineQueue = new Queue<IEnumerator>();
    static object _lock = new object();

    public void Update()
    {
        while (_coroutineQueue.Count > 0)
        {
            StartCoroutine(_coroutineQueue.Dequeue());
        }
    }

    public static void ExecuteCoroutineOnMainThread(IEnumerator coroutine)
    {
        lock (_lock) {
            _coroutineQueue.Enqueue(coroutine);
        }
    }
}
```

### Xamarin
<a name="implement-id-provider-1.xamarin"></a>

Untuk menggunakan identitas yang diautentikasi pengembang, Anda harus memperluas `CognitoAWSCredentials` dan mengganti `RefreshIdentity` metode untuk mengambil id identitas pengguna dan token dari backend Anda dan mengembalikannya. Berikut ini adalah contoh dasar dari penyedia identitas yang akan menghubungi backend hipotetis di 'example.com':

```
public class DeveloperAuthenticatedCredentials : CognitoAWSCredentials
{
    const string PROVIDER_NAME = "example.com";
    const string IDENTITY_POOL = "IDENTITY_POOL_ID";
    static readonly RegionEndpoint REGION = RegionEndpoint.USEast1;
    private string login = null;

    public DeveloperAuthenticatedCredentials(string loginAlias)
        : base(IDENTITY_POOL, REGION)
    {
        login = loginAlias;
    }

    protected override async Task<IdentityState> RefreshIdentityAsync()
    {
        IdentityState state = null;
        //get your identity and set the state
        return state;
    }
}
```

## Memperbarui peta login (hanya Android dan iOS)
<a name="updating-the-logins-map"></a>

### Android
<a name="updating-logins-map-1.android"></a>

Setelah berhasil mengautentikasi pengguna dengan sistem otentikasi Anda, perbarui peta login dengan nama penyedia pengembang dan pengenal pengguna pengembang. Ini adalah string alfanumerik yang secara unik mengidentifikasi pengguna dalam sistem otentikasi Anda. Pastikan untuk memanggil metode `refresh` setelah memperbarui peta login sebagai `identityId` mungkin telah berubah:

```
HashMap<String, String> loginsMap = new HashMap<String, String>();
loginsMap.put(developerAuthenticationProvider.getProviderName(), developerUserIdentifier);

credentialsProvider.setLogins(loginsMap);
credentialsProvider.refresh();
```

### iOS - Objektif-C
<a name="updating-logins-map-1.ios-objc"></a>

SDK iOS hanya memanggil metode `logins` untuk mendapatkan peta login terbaru jika tidak ada kredensial atau kredensial telah kedaluwarsa. Jika Anda ingin memaksa SDK untuk mendapatkan kredensi baru (misalnya, pengguna akhir Anda beralih dari yang tidak diautentikasi ke yang diautentikasi dan Anda ingin kredensialnya terhadap pengguna yang diautentikasi), hubungi Anda. `clearCredentials` `credentialsProvider`

```
[credentialsProvider clearCredentials];
```

### iOS - cepat
<a name="updating-logins-map-1.ios-swift"></a>

SDK iOS hanya memanggil metode `logins` untuk mendapatkan peta login terbaru jika tidak ada kredensial atau kredensial telah kedaluwarsa. Jika Anda ingin memaksa SDK untuk mendapatkan kredensial baru (misalnya, pengguna akhir Anda beralih dari tidak diautentikasi menjadi diautentikasi dan Anda ingin kredensial terhadap pengguna yang diautentikasi), panggil `clearCredentials` di `credentialsProvider` Anda.

```
credentialsProvider.clearCredentials()
```

## Mendapatkan token (sisi server)
<a name="getting-a-token-server-side"></a>

Anda mendapatkan token dengan menelepon [GetOpenIdTokenForDeveloperIdentity](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_GetOpenIdTokenForDeveloperIdentity.html). API ini harus dipanggil dari backend Anda menggunakan AWS kredensi pengembang. Itu tidak boleh dipanggil dari SDK klien. API menerima ID kumpulan identitas Cognito; peta login yang berisi nama penyedia identitas Anda sebagai kunci dan pengenal sebagai nilai; dan secara opsional ID identitas Cognito (misalnya, Anda membuat pengguna yang tidak diautentikasi diautentikasi). Pengidentifikasi dapat berupa nama pengguna dari pengguna Anda, alamat email, atau nilai numerik. API merespons panggilan Anda dengan ID Cognito unik untuk pengguna Anda dan token OpenID Connect untuk pengguna akhir.

Beberapa hal yang perlu diingat tentang token yang dikembalikan oleh `GetOpenIdTokenForDeveloperIdentity`:
+ Anda dapat menentukan waktu kedaluwarsa kustom untuk token sehingga Anda dapat men-cache token itu. Jika Anda tidak memberikan waktu kedaluwarsa kustom, token ini berlaku selama 15 menit. 
+ Durasi token maksimum yang dapat Anda atur adalah 24 jam.
+ Berhati-hati terhadap implikasi keamanan dari meningkatkan durasi token. Jika penyerang memperoleh token ini, mereka dapat menukarnya dengan AWS kredensi untuk pengguna akhir selama durasi token.

Cuplikan Java berikut menunjukkan cara menginisialisasi klien Amazon Cognito dan mengambil token untuk identitas yang diautentikasi pengembang.

```
// authenticate your end user as appropriate
// ....

// if authenticated, initialize a cognito client with your AWS developer credentials
AmazonCognitoIdentity identityClient = new AmazonCognitoIdentityClient(
  new BasicAWSCredentials("access_key_id", "secret_access_key")
);

// create a new request to retrieve the token for your end user
GetOpenIdTokenForDeveloperIdentityRequest request =
  new GetOpenIdTokenForDeveloperIdentityRequest();
request.setIdentityPoolId("YOUR_COGNITO_IDENTITY_POOL_ID");

request.setIdentityId("YOUR_COGNITO_IDENTITY_ID"); //optional, set this if your client has an
                                                   //identity ID that you want to link to this 
                                                   //developer account

// set up your logins map with the username of your end user
HashMap<String,String> logins = new HashMap<>();
logins.put("YOUR_IDENTITY_PROVIDER_NAME","YOUR_END_USER_IDENTIFIER");
request.setLogins(logins);

// optionally set token duration (in seconds)
request.setTokenDuration(60 * 15l);
GetOpenIdTokenForDeveloperIdentityResult response =
  identityClient.getOpenIdTokenForDeveloperIdentity(request);

// obtain identity id and token to return to your client
String identityId = response.getIdentityId();
String token = response.getToken();

//code to return identity id and token to client
//...
```

Mengikuti langkah-langkah sebelumnya, Anda harus dapat mengintegrasikan identitas yang diautentikasi pengembang di aplikasi Anda. Jika Anda memiliki masalah atau pertanyaan, jangan ragu untuk memposting di [forum](https://forums.aws.amazon.com/forum.jspa?forumID=173) kami.

## Connect ke identitas sosial yang ada
<a name="connect-to-an-existing-social-identity"></a>

Semua penautan penyedia ketika Anda menggunakan identitas yang diautentikasi pengembang harus dilakukan dari backend Anda. Untuk menghubungkan identitas kustom ke identitas sosial pengguna (Login with Amazon, Masuk dengan Apple, Facebook, atau Google), tambahkan token penyedia identitas ke peta login saat Anda menelepon [GetOpenIdTokenForDeveloperIdentity](https://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_GetOpenIdTokenForDeveloperIdentity.html). Untuk membuat ini mungkin, ketika Anda memanggil backend Anda dari SDK klien Anda untuk mengautentikasi pengguna akhir Anda, berikan secara tambahan token penyedia sosial pengguna akhir.

Misalnya, jika Anda mencoba untuk menautkan identitas kustom ke Facebook, Anda akan menambahkan token Facebook selain pengidentifikasi penyedia identitas Anda ke peta login ketika Anda memanggil `GetOpenIdTokenForDeveloperIdentity`.

```
logins.put("YOUR_IDENTITY_PROVIDER_NAME","YOUR_END_USER_IDENTIFIER");
logins.put("graph.facebook.com","END_USERS_FACEBOOK_ACCESSTOKEN");
```

## Mendukung transisi antar penyedia
<a name="supporting-transition-between-providers"></a>

### Android
<a name="support-transition-between-providers-1.android"></a>

Aplikasi Anda mungkin memerlukan dukungan identitas yang tidak diautentikasi atau identitas yang diautentikasi menggunakan penyedia publik (Login with Amazon, Masuk dengan Apple, Facebook, atau Google) bersama dengan identitas yang diautentikasi pengembang. Perbedaan penting antara identitas yang diautentikasi pengembang dan identitas lainnya (identitas yang tidak diautentikasi dan identitas yang diautentikasi menggunakan penyedia publik) adalah cara IdentityID dan token diperoleh. Untuk identitas lain, aplikasi seluler akan berinteraksi langsung dengan Amazon Cognito alih-alih menghubungi sistem otentikasi Anda. Jadi aplikasi seluler harus dapat mendukung dua alur berbeda tergantung pada pilihan yang dibuat oleh pengguna aplikasi. Untuk ini, Anda harus membuat beberapa perubahan pada penyedia identitas khusus.

`refresh`Metode ini memeriksa peta login. Jika peta tidak kosong dan memiliki kunci dengan nama penyedia pengembang, maka panggil backend Anda. Jika tidak, panggil getIdentityId metode dan kembalikan null.

```
public String refresh() {

   setToken(null);

   // If the logins map is not empty make a call to your backend
   // to get the token and identityId
   if (getProviderName() != null &&
      !this.loginsMap.isEmpty() &&
      this.loginsMap.containsKey(getProviderName())) {

      /**
       * This is where you would call your backend
       **/

      // now set the returned identity id and token in the provider
      update(identityId, token);
      return token;

   } else {
      // Call getIdentityId method and return null
      this.getIdentityId();
      return null;
   }
}
```

Demikian pula metode `getIdentityId` akan memiliki dua alur tergantung pada isi dari peta login:

```
public String getIdentityId() {

   // Load the identityId from the cache
   identityId = cachedIdentityId;

   if (identityId == null) {

      // If the logins map is not empty make a call to your backend
      // to get the token and identityId

      if (getProviderName() != null && !this.loginsMap.isEmpty()
         && this.loginsMap.containsKey(getProviderName())) {

         /**
           * This is where you would call your backend
          **/

         // now set the returned identity id and token in the provider
         update(identityId, token);
         return token;

      } else {
         // Otherwise call &COG; using getIdentityId of super class
         return super.getIdentityId();
      }

   } else {
      return identityId;
   }

}
```

### iOS - Objektif-C
<a name="support-transition-between-providers-1.ios-objc"></a>

Aplikasi Anda mungkin memerlukan dukungan identitas yang tidak diautentikasi atau identitas yang diautentikasi menggunakan penyedia publik (Login with Amazon, Masuk dengan Apple, Facebook, atau Google) bersama dengan identitas yang diautentikasi pengembang. Untuk melakukan ini, ganti [AWSCognitoCredentialsProviderHelper](https://github.com/aws-amplify/aws-sdk-ios)`logins`metode untuk dapat mengembalikan peta login yang benar berdasarkan penyedia identitas saat ini. Contoh ini menunjukkan kepada Anda bagaimana Anda dapat berputar antara tidak diautentikasi, Facebook, dan yang diautentikasi oleh pengembang.

```
- (AWSTask<NSDictionary<NSString *, NSString *> *> *)logins {
    if(/*logic to determine if user is unauthenticated*/) {
        return [AWSTask taskWithResult:nil];
    }else if (/*logic to determine if user is Facebook*/){
        return [AWSTask taskWithResult: @{ AWSIdentityProviderFacebook : [FBSDKAccessToken currentAccessToken] }];
    }else {
        return [super logins];
    }
}
```

Ketika Anda beralih dari tidak diautentikasi ke diautentikasi, Anda harus memanggil `[credentialsProvider clearCredentials];` untuk memaksa SDK untuk mendapatkan kredensial baru yang diautentikasi. Ketika Anda beralih di antara dua penyedia yang diautentikasi dan Anda tidak mencoba menautkan kedua penyedia (misalnya, Anda tidak menyediakan token untuk beberapa penyedia di kamus login Anda), hubungi. `[credentialsProvider clearKeychain];` Ini akan menghapus baik kredensial dan identitas dan memaksa SDK untuk mendapatkan yang baru.

### iOS - cepat
<a name="support-transition-between-providers-1.ios-swift"></a>

Aplikasi Anda mungkin memerlukan dukungan identitas yang tidak diautentikasi atau identitas yang diautentikasi menggunakan penyedia publik (Login with Amazon, Masuk dengan Apple, Facebook, atau Google) bersama dengan identitas yang diautentikasi pengembang. Untuk melakukan ini, ganti [AWSCognitoCredentialsProviderHelper](https://github.com/aws-amplify/aws-sdk-ios)`logins`metode untuk dapat mengembalikan peta login yang benar berdasarkan penyedia identitas saat ini. Contoh ini menunjukkan kepada Anda bagaimana Anda dapat berputar antara tidak diautentikasi, Facebook, dan yang diautentikasi oleh pengembang.

```
override func logins () -> AWSTask<NSDictionary> {
    if(/*logic to determine if user is unauthenticated*/) {
        return AWSTask(result:nil)
    }else if (/*logic to determine if user is Facebook*/){
        if let token = AccessToken.current?.authenticationToken {
            return AWSTask(result: [AWSIdentityProviderFacebook:token])
        }
        return AWSTask(error:NSError(domain: "Facebook Login", code: -1 , userInfo: ["Facebook" : "No current Facebook access token"]))
    }else {
        return super.logins()
    }
}
```

Ketika Anda beralih dari tidak diautentikasi ke diautentikasi, Anda harus memanggil `credentialsProvider.clearCredentials()` untuk memaksa SDK untuk mendapatkan kredensial baru yang diautentikasi. Ketika Anda beralih di antara dua penyedia yang diautentikasi dan Anda tidak mencoba menautkan kedua penyedia tersebut (yaitu Anda tidak menyediakan token untuk beberapa penyedia dalam kamus login Anda), Anda harus memanggil `credentialsProvider.clearKeychain()`. Ini akan menghapus baik kredensial dan identitas dan memaksa SDK untuk mendapatkan yang baru.

### Unity
<a name="support-transition-between-providers-1.unity"></a>

Aplikasi Anda mungkin memerlukan dukungan identitas yang tidak diautentikasi atau identitas yang diautentikasi menggunakan penyedia publik (Login with Amazon, Masuk dengan Apple, Facebook, atau Google) bersama dengan identitas yang diautentikasi pengembang. Perbedaan penting antara identitas yang diautentikasi pengembang dan identitas lainnya (identitas yang tidak diautentikasi dan identitas yang diautentikasi menggunakan penyedia publik) adalah cara IdentityID dan token diperoleh. Untuk identitas lain, aplikasi seluler akan berinteraksi langsung dengan Amazon Cognito alih-alih menghubungi sistem otentikasi Anda. Aplikasi seluler harus dapat mendukung dua aliran berbeda tergantung pada pilihan yang dibuat oleh pengguna aplikasi. Untuk ini, Anda harus membuat beberapa perubahan pada penyedia identitas kustom.

Cara yang disarankan untuk melakukannya di Unity adalah dengan memperluas penyedia identitas Anda dari AmazonCognitoEnhancedIdentityProvide alih-alih AbstractCognitoIdentityProvider, dan memanggil RefreshAsync metode induk alih-alih metode Anda sendiri jika pengguna tidak diautentikasi dengan backend Anda sendiri. Jika pengguna diautentikasi, Anda dapat menggunakan alur yang sama yang dijelaskan sebelumnya.

### Xamarin
<a name="support-transition-between-providers-1.xamarin"></a>

Aplikasi Anda mungkin memerlukan dukungan identitas yang tidak diautentikasi atau identitas yang diautentikasi menggunakan penyedia publik (Login with Amazon, Masuk dengan Apple, Facebook, atau Google) bersama dengan identitas yang diautentikasi pengembang. Perbedaan penting antara identitas yang diautentikasi pengembang dan identitas lainnya (identitas yang tidak diautentikasi dan identitas yang diautentikasi menggunakan penyedia publik) adalah cara IdentityID dan token diperoleh. Untuk identitas lain, aplikasi seluler akan berinteraksi langsung dengan Amazon Cognito alih-alih menghubungi sistem otentikasi Anda. Aplikasi seluler harus dapat mendukung dua aliran berbeda tergantung pada pilihan yang dibuat oleh pengguna aplikasi. Untuk ini, Anda harus membuat beberapa perubahan pada penyedia identitas khusus.

# Mengalihkan pengguna yang tidak diautentikasi ke pengguna yang diautentikasi
<a name="switching-identities"></a>

Kolam identitas Amazon Cognito mendukung pengguna yang diautentikasi dan tidak terautentikasi. Pengguna yang tidak diautentikasi menerima akses ke AWS sumber daya Anda meskipun mereka tidak masuk dengan penyedia identitas Anda ()IdPs. Tingkat akses ini berguna untuk menampilkan konten kepada pengguna sebelum mereka masuk. Setiap pengguna tidak terautentikasi memiliki identitas unik di kolam identitas, meskipun mereka belum masuk secara individual dan diautentikasi.

Bagian ini menjelaskan kasus di mana pengguna Anda memilih untuk beralih dari masuk dengan identitas yang tidak terautentikasi ke menggunakan identitas yang terautentikasi.

## Android
<a name="switching-identities-1.android"></a>

Pengguna dapat masuk ke aplikasi Anda sebagai tamu yang tidak terautentikasi. Akhirnya mereka mungkin memutuskan untuk masuk menggunakan salah satu yang didukung IdPs. Amazon Cognito memastikan bahwa identitas lama mempertahankan pengenal unik yang sama seperti yang baru, dan bahwa data profil digabung secara otomatis.

Aplikasi Anda diberitahu tentang gabungan profil melalui antarmuka `IdentityChangedListener`. Menerapkan metode `identityChanged` dalam antarmuka untuk menerima pesan ini:

```
@override
public void identityChanged(String oldIdentityId, String newIdentityId) {
    // handle the change
}
```

## iOS - Objektif-C
<a name="switching-identities-1.ios-objc"></a>

Pengguna dapat masuk ke aplikasi Anda sebagai tamu yang tidak terautentikasi. Akhirnya mereka mungkin memutuskan untuk masuk menggunakan salah satu yang didukung IdPs. Amazon Cognito memastikan bahwa identitas lama mempertahankan pengenal unik yang sama seperti yang baru, dan bahwa data profil digabung secara otomatis.

`NSNotificationCenter` menginformasikan aplikasi penggabungan profil Anda:

```
[[NSNotificationCenter defaultCenter] addObserver:self
                                      selector:@selector(identityIdDidChange:)
                                      name:AWSCognitoIdentityIdChangedNotification
                                      object:nil];

-(void)identityDidChange:(NSNotification*)notification {
    NSDictionary *userInfo = notification.userInfo;
    NSLog(@"identity changed from %@ to %@",
        [userInfo objectForKey:AWSCognitoNotificationPreviousId],
        [userInfo objectForKey:AWSCognitoNotificationNewId]);
}
```

## iOS - cepat
<a name="switching-identities-1.ios-swift"></a>

Pengguna dapat masuk ke aplikasi Anda sebagai tamu yang tidak terautentikasi. Akhirnya mereka mungkin memutuskan untuk masuk menggunakan salah satu yang didukung IdPs. Amazon Cognito memastikan bahwa identitas lama mempertahankan pengenal unik yang sama seperti yang baru, dan bahwa data profil digabung secara otomatis.

`NSNotificationCenter` menginformasikan aplikasi penggabungan profil Anda:

```
[NSNotificationCenter.defaultCenter().addObserver(observer: self
   selector:"identityDidChange"
   name:AWSCognitoIdentityIdChangedNotification
   object:nil)

func identityDidChange(notification: NSNotification!) {
  if let userInfo = notification.userInfo as? [String: AnyObject] {
    print("identity changed from: \(userInfo[AWSCognitoNotificationPreviousId])
    to: \(userInfo[AWSCognitoNotificationNewId])")
  }
}
```

## JavaScript
<a name="switching-identities-1.javascript"></a>

### Awalnya pengguna yang tidak diautentikasi
<a name="switching-identities-1.javascript-unauth"></a>

Pengguna biasanya mulai dengan peran tidak terautentikasi. Untuk peran ini, Anda mengatur properti kredensial dari objek konfigurasi Anda tanpa properti Masuk. Dalam kasus ini, konfigurasi default Anda mungkin terlihat seperti berikut ini:

```
// set the default config object
var creds = new AWS.CognitoIdentityCredentials({
    IdentityPoolId: 'us-east-1:1699ebc0-7900-4099-b910-2df94f52a030'
});
AWS.config.credentials = creds;
```

### Beralih ke pengguna yang diautentikasi
<a name="switching-identities-1.javascript-auth"></a>

Ketika pengguna tidak terautentikasi masuk ke IdP dan Anda memiliki token, Anda dapat beralih pengguna dari yang tidak terauntentikasi menjadi terautentikasi dengan memanggil fungsi kustom yang memperbarui kredensial objek dan menambahkan token Masuk:

```
// Called when an identity provider has a token for a logged in user
function userLoggedIn(providerName, token) {
    creds.params.Logins = creds.params.Logins || {};
    creds.params.Logins[providerName] = token;

    // Expire credentials to refresh them on the next request
    creds.expired = true;
}
```

Anda juga dapat membuat objek `CognitoIdentityCredentials`. Jika Anda melakukannya, Anda harus mengatur ulang properti kredensial objek layanan yang sudah ada untuk mencerminkan informasi konfigurasi kredensial yang diperbarui. Lihat [Menggunakan objek konfigurasi global](https://docs.aws.amazon.com/sdk-for-javascript/latest/developer-guide/global-config-object.html).

Untuk informasi lebih lanjut tentang `CognitoIdentityCredentials` objek, lihat [AWS. CognitoIdentityCredentials](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CognitoIdentityCredentials.html)di Referensi AWS SDK untuk JavaScript API.

## Unity
<a name="switching-identities-1.unity"></a>

Pengguna dapat masuk ke aplikasi Anda sebagai tamu yang tidak terautentikasi. Akhirnya mereka mungkin memutuskan untuk masuk menggunakan salah satu yang didukung IdPs. Amazon Cognito memastikan bahwa identitas lama mempertahankan pengenal unik yang sama seperti yang baru, dan bahwa data profil digabung secara otomatis.

Anda dapat berlangganan ke `IdentityChangedEvent` untuk menerima notifikasi tentang penggabungan profil:

```
credentialsProvider.IdentityChangedEvent += delegate(object sender, CognitoAWSCredentials.IdentityChangedArgs e)
{
    // handle the change
    Debug.log("Identity changed from " + e.OldIdentityId + " to " + e.NewIdentityId);
};
```

## Xamarin
<a name="switching-identities-1.xamarin"></a>

Pengguna dapat masuk ke aplikasi Anda sebagai tamu yang tidak terautentikasi. Akhirnya mereka mungkin memutuskan untuk masuk menggunakan salah satu yang didukung IdPs. Amazon Cognito memastikan bahwa identitas lama mempertahankan pengenal unik yang sama seperti yang baru, dan bahwa data profil digabung secara otomatis.

```
credentialsProvider.IdentityChangedEvent += delegate(object sender, CognitoAWSCredentials.IdentityChangedArgs e){
    // handle the change
    Console.WriteLine("Identity changed from " + e.OldIdentityId + " to " + e.NewIdentityId);
};
```