Aliran otentikasi kumpulan identitas (identitas federasi) - Amazon Cognito

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

Aliran otentikasi kumpulan identitas (identitas federasi)

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 membuat peran dengan akses ke toko Amazon Cognito Sync dan ke Amazon Mobile Analytics. Untuk informasi selengkapnya tentang cara memberikan akses tambahan, lihatPeran IAM.

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

Authflow yang disempurnakan (disederhanakan)

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

  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.

  2. Kumpulan identitas Anda mengembalikan ID identitas.

  3. Aplikasi Anda menggabungkan ID identitas dengan bukti otentikasi yang sama dalam GetCredentialsForIdentitypermintaan.

  4. Kumpulan identitas Anda mengembalikan AWS kredensialnya.

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

Otentikasi yang disempurnakan mengelola logika pemilihan peran IAM dan pengambilan kredensil dalam konfigurasi kumpulan identitas Anda. Anda dapat mengonfigurasi kumpulan identitas untuk memilih peran default, untuk 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

  2. GetCredentialsForIdentity

Diagram yang menunjukkan aliran otentikasi yang ditingkatkan

Authflow dasar (klasik)

Saat Anda menggunakan authflow dasar,

  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.

  2. Kumpulan identitas Anda mengembalikan ID identitas.

  3. Aplikasi Anda menggabungkan ID identitas dengan bukti otentikasi yang sama dalam GetOpenIdTokenpermintaan.

  4. GetOpenIdTokenmengembalikan token OAuth 2.0 baru yang dikeluarkan oleh kumpulan identitas Anda.

  5. Aplikasi Anda menyajikan token baru dalam AssumeRoleWithWebIdentitypermintaan.

  6. AWS Security Token Service AWS STS) mengembalikan AWS kredensi.

  7. 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. GetCredentialsForIdentityPermintaan authflow yang disempurnakan meminta peran berdasarkan konten token akses. AssumeRoleWithWebIdentityPermintaan 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 konfigurasi dengan kebijakan kepercayaan yang memadai. Anda juga dapat meminta durasi sesi peran khusus.

Urutan operasi dalam otentikasi Dasar
  1. GetId

  2. GetOpenIdToken

  3. AssumeRoleWithWebIdentity

Diagram yang menunjukkan aliran otentikasi dasar

Identitas otentikasi pengembang authflow

Saat menggunakanIdentitas yang diautentikasi pengembang (kumpulan identitas), klien menggunakan authflow berbeda yang menyertakan kode di luar Amazon Cognito untuk memvalidasi pengguna di sistem autentikasi Anda sendiri. Kode di luar Amazon Cognito ditunjukkan seperti itu.

Authflow yang disempurnakan

Urutan operasi dalam otentikasi yang ditingkatkan dengan penyedia pengembang
  1. Login melalui Penyedia Developer (kode di luar Amazon Cognito)

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

  3. GetOpenIdTokenForDeveloperIdentity

  4. GetCredentialsForIdentity

Diagram yang menunjukkan aliran otentikasi ditingkatkan yang diautentikasi pengembang
Urutan operasi dalam otentikasi Dasar dengan penyedia pengembang
  1. Terapkan logika di luar kumpulan identitas untuk masuk dan menghasilkan pengenal pengembang-penyedia.

  2. Ambil kredensial-sisi server AWS yang tersimpan.

  3. Kirim pengenal penyedia pengembang dalam permintaan GetOpenIdTokenForDeveloperIdentityAPI yang ditandatangani dengan AWS kredensil resmi.

  4. Minta kredensi aplikasi dengan. AssumeRoleWithWebIdentity

Diagram yang menunjukkan aliran otentikasi dasar yang diautentikasi pengembang

Authflow mana yang harus saya gunakan?

Aliran yang disempurnakan 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 Anda danamr, atau status yang diautentikasi/tidak diautentikasi.

Demikian pula, pahami bahwa otentikasi pengembang adalah jalan pintas seputar validasi otentikasi penyedia identitas. Amazon Cognito mempercayai AWS kredensil yang mengotorisasi GetOpenIdTokenForDeveloperIdentitypermintaan tanpa validasi tambahan dari konten permintaan. Amankan rahasia yang mengotorisasi otentikasi pengembang dari akses oleh pengguna.

Ringkasan API

GetId

Panggilan GetIdAPI 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. SDK AWS Seluler 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+, Login with Amazon, atau Masuk dengan Apple), pengguna juga dapat menyediakan token (OAuth atau OpenID Connect) yang mengidentifikasi mereka di penyedia tersebut. Saat digunakan dalam panggilan keGetId, 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

GetCredentialsForIdentityAPI dapat dipanggil setelah Anda membuat ID identitas. Operasi ini secara fungsional setara dengan memanggil GetOpenIdToken, kemudian AssumeRoleWithWebIdentity.

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

GetOpenIdToken

Buat permintaan GetOpenIdTokenAPI setelah Anda membuat ID identitas. Cache ID identitas setelah permintaan pertama Anda, dan mulai sesi dasar (klasik) berikutnya untuk identitas tersebutGetOpenIdToken.

Respons terhadap permintaan GetOpenIdToken API adalah token yang dihasilkan Amazon Cognito. Anda dapat mengirimkan token ini sebagai WebIdentityToken parameter dalam AssumeRoleWithWebIdentitypermintaan.

Sebelum Anda mengirimkan token OpenID, verifikasi di aplikasi Anda. Anda dapat menggunakan pustaka OIDC di SDK atau pustaka seperti aws-jwt-verifyuntuk mengonfirmasi bahwa Amazon Cognito mengeluarkan token. ID kunci penandatanganan, ataukid, dari token OpenID adalah salah satu yang tercantum dalam dokumen Identitas Amazon Cognito †jwks_uri. Kunci-kunci ini dapat berubah. Fungsi Anda yang memverifikasi token Identitas Amazon Cognito harus memperbarui daftar kuncinya secara berkala dari dokumen jwks_uri. Amazon Cognito menetapkan durasi penyegaran di header respons kontrol cache jwks_uri, 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 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 induk/pemilik semua login yang terkait dan identitas lainnya dinonaktifkan. Dalam hal ini, ID identitas dari induk/pemilik dikembalikan. Anda harus memperbarui cache lokal Anda jika nilai ini berbeda. Penyedia di SDK AWS Seluler atau AWS SDK untuk JavaScript di Browser melakukan operasi ini untuk Anda.

GetOpenIdTokenForDeveloperIdentity

GetOpenIdTokenForDeveloperIdentityOperasi menggantikan penggunaan GetIddan GetOpenIdTokendari 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 ID identitas pengembang setelah permintaan pertama Anda, dan mulai sesi dasar (klasik) berikutnya untuk identitas tersebutGetOpenIdTokenForDeveloperIdentity.

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 aws-jwt-verifyuntuk mengonfirmasi bahwa Amazon Cognito mengeluarkan token. ID kunci penandatanganan, ataukid, dari token OpenID Connect adalah salah satu yang tercantum dalam dokumen jwks_uri Amazon Cognito Identity †. Kunci-kunci ini dapat berubah. Fungsi Anda yang memverifikasi token Identitas Amazon Cognito harus memperbarui daftar kuncinya secara berkala dari dokumen jwks_uri. Amazon Cognito menetapkan durasi penyegaran di header cache-control respons jwks_uri, 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 atauGetOpenIdToken.

Menggabungkan identitas

Dengan identitas otentikasi pengembang, Amazon Cognito mendukung penggabungan implisit dan penggabungan eksplisit melalui API. MergeDeveloperIdentities 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 AssumeRoleWithWebIdentityAPI 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 mengatur kumpulan identitas Anda. Peran ini secara efektif tidak memiliki izin yang diberikan. Ubah mereka untuk memenuhi kebutuhan Anda.

Pelajari lebih lanjut tentang Kepercayaan peran dan izin.

† Dokumen 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_uri yang berbeda.

Amazon Cognito Identity JSON web key URIs in other Wilayah AWS
Wilayah AWS Jalur ke dokumen jwks_uri
AWS GovCloud (AS-Barat) https://cognito-identity.us-gov-west-1.amazonaws.com/.well-known/jwks_uri
Tiongkok (Beijing) https://cognito-identity---cn-north-1.amazonaws.com.rproxy.goskope.com.cn/.well-known/jwks_uri
Opt-in Regions seperti Eropa (Milan) dan Afrika (Cape Town) https://cognito-identity.Region.amazonaws.com/.well-known/jwks_uri

Anda juga dapat mengekstrapolasi jwks_uri 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_uri untuk token Anda.