

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

# Penyedia identitas dan titik akhir pihak yang mengandalkan
<a name="federation-endpoints"></a>

*Titik akhir Federasi adalah titik* akhir kumpulan pengguna yang melayani tujuan untuk salah satu standar otentikasi yang digunakan oleh kumpulan pengguna. Mereka termasuk SAMP ACS URLs, titik akhir penemuan OIDC, dan titik akhir layanan untuk peran kumpulan pengguna baik sebagai penyedia identitas dan pihak yang mengandalkan. Titik akhir Federasi memulai alur otentikasi, menerima bukti otentikasi dari IdPs, dan mengeluarkan token ke klien. Mereka berinteraksi dengan IdPs, aplikasi, dan administrator, tetapi tidak dengan pengguna.

Topik halaman penuh setelah halaman ini memiliki detail tentang titik akhir penyedia OAuth 2.0 dan OIDC yang tersedia saat Anda menambahkan domain ke kumpulan pengguna Anda. Bagan berikut adalah daftar semua titik akhir federasi.

Contoh [domain kumpulan pengguna](cognito-user-pools-assign-domain.md) adalah:

1. Domain awalan: `mydomain.auth.us-east-1.amazoncognito.com`

1. Domain kustom: `auth.example.com`


**Titik akhir federasi kumpulan pengguna**  

| URL Titik Akhir | Deskripsi | Bagaimana itu diakses | 
| --- | --- | --- | 
| https:///oauth2/otorisasi Your user pool domain | Mengalihkan pengguna ke login terkelola atau masuk dengan IDP mereka. | Dipanggil di browser pelanggan untuk memulai otentikasi pengguna. Lihat [Otorisasi titik akhir](authorization-endpoint.md). | 
| https:///oauth2/token Your user pool domain | Mengembalikan token berdasarkan kode otorisasi atau permintaan kredensional klien. | Diminta oleh aplikasi untuk mengambil token. Lihat [Titik akhir token](token-endpoint.md). | 
| https://Your user pool domain/OAuth2/userInfo | Mengembalikan atribut pengguna berdasarkan cakupan OAuth 2.0 dan identitas pengguna dalam token akses. | Diminta oleh aplikasi untuk mengambil profil pengguna. Lihat [Titik akhir UserInfo](userinfo-endpoint.md). | 
| https:///oauth2/mencabut Your user pool domain | Mencabut token penyegaran dan token akses terkait. | Diminta oleh aplikasi untuk mencabut token. Lihat [Cabut titik akhir](revocation-endpoint.md). | 
| https://cognito-idp. Region.amazonaws.com/ /.well-known/openid-configuration your user pool ID | Direktori arsitektur OIDC dari kumpulan pengguna Anda. [1](#cognito-federation-oidc-discovery-note) | Diminta oleh aplikasi untuk menemukan metadata penerbit kumpulan pengguna. | 
| https://cognito-idp. Region.amazonaws.com/ your user pool ID /.well-known/jwks.json | Kunci publik yang dapat Anda gunakan untuk memvalidasi token Amazon Cognito. [2](#cognito-federation-oidc-jwks-note) | Diminta oleh aplikasi untuk memverifikasi JWTs. | 
| https:///oauth2/idpresponse Your user pool domain | Penyedia identitas sosial harus mengarahkan pengguna Anda ke titik akhir ini dengan kode otorisasi. Amazon Cognito menukarkan kode untuk token saat mengautentikasi pengguna federasi Anda. | Dialihkan dari OIDC iDP sign-in sebagai URL callback klien iDP. | 
| https:///saml2/idpresponse Your user pool domain | URL Assertion Consumer Response (ACS) untuk integrasi dengan penyedia identitas SAMP 2.0. | Dialihkan dari SAMP 2.0 iDP sebagai URL ACS, atau titik originasi untuk login yang diprakarsai IDP. [3](#cognito-federation-idp-init-note) | 
| https:///saml2/logout Your user pool domain | URL [Single Logout](cognito-user-pools-saml-idp-sign-out.md#cognito-user-pools-saml-idp-sign-out.title) (SLO) untuk integrasi dengan penyedia identitas SAMP 2.0. | Dialihkan dari SAMP 2.0 iDP sebagai URL logout tunggal (SLO). Hanya menerima pengikatan POST. | 

1 `openid-configuration` Dokumen dapat diperbarui kapan saja dengan informasi tambahan yang membuat titik akhir sesuai dengan OIDC dan spesifikasi. OAuth2 

2 File `jwks.json` JSON dapat diperbarui kapan saja dengan kunci penandatanganan token publik baru.

3 Untuk informasi selengkapnya tentang login SAMP yang diprakarsai IDP, lihat. [Menerapkan login SAMP yang diprakarsai IDP](cognito-user-pools-SAML-session-initiation.md#cognito-user-pools-SAML-session-initiation-idp-initiation)

[Untuk informasi selengkapnya tentang OpenID Connect dan OAuth standar, lihat OpenID [Connect](http://openid.net/specs/openid-connect-core-1_0.html) 1.0 dan 2.0. OAuth](https://tools.ietf.org/html/rfc6749)

**Topics**
+ [Titik akhir pengalihan dan otorisasi](authorization-endpoint.md)
+ [Titik akhir penerbit token](token-endpoint.md)
+ [Atribut pengguna endpoint](userinfo-endpoint.md)
+ [Titik akhir pencabutan token](revocation-endpoint.md)
+ [Titik akhir pernyataan IDP SAMP](saml2-idpresponse-endpoint.md)

# Titik akhir pengalihan dan otorisasi
<a name="authorization-endpoint"></a>

Titik `/oauth2/authorize` akhir adalah titik akhir pengalihan yang mendukung dua tujuan pengalihan. Jika Anda menyertakan `idp_identifier` parameter `identity_provider` atau di URL, parameter tersebut secara diam-diam mengarahkan pengguna Anda ke halaman masuk untuk penyedia identitas tersebut (iDP). Jika tidak, itu mengalihkan ke [Titik akhir masuk](login-endpoint.md) dengan parameter URL yang sama yang Anda sertakan dalam permintaan Anda. 

Titik akhir otorisasi mengalihkan ke login terkelola atau ke halaman masuk IDP. Tujuan sesi pengguna di titik akhir ini adalah halaman web yang harus berinteraksi dengan pengguna Anda secara langsung di browser mereka.

Untuk menggunakan titik akhir otorisasi, panggil browser pengguna Anda di `/oauth2/authorize` dengan parameter yang menyediakan kumpulan pengguna Anda dengan informasi tentang detail kumpulan pengguna berikut.
+ Klien aplikasi yang ingin Anda masuki.
+ URL callback yang ingin Anda dapatkan.
+ Cakupan OAuth 2.0 yang ingin Anda minta di token akses pengguna Anda.
+ Secara opsional, idP pihak ketiga yang ingin Anda gunakan untuk masuk.

Anda juga dapat menyediakan `state` dan `nonce` parameter yang digunakan Amazon Cognito untuk memvalidasi klaim yang masuk.

## DAPATKAN `/oauth2/authorize`
<a name="get-authorize"></a>

Titik akhir `/oauth2/authorize` hanya mendukung `HTTPS GET`. Aplikasi Anda biasanya memulai permintaan ini di browser pengguna Anda. Anda hanya dapat membuat permintaan ke `/oauth2/authorize` titik akhir melalui HTTPS.

[Anda dapat mempelajari lebih lanjut tentang definisi titik akhir otorisasi dalam standar OpenID Connect (OIDC) di Authorization Endpoint.](http://openid.net/specs/openid-connect-core-1_0.html#ImplicitAuthorizationEndpoint)

### Permintaan parameter
<a name="get-authorize-request-parameters"></a>

**`response_type`**  
Wajib.  
Jenis respon. Harus `code` atau `token`.   
Permintaan yang berhasil dengan `response_type` `code` pengembalian hibah kode otorisasi. Pemberian kode otorisasi adalah `code` parameter yang ditambahkan Amazon Cognito ke URL pengalihan Anda. Aplikasi Anda dapat bertukar kode dengan token akses, ID, dan penyegaran. [Titik akhir token](token-endpoint.md) Sebagai praktik keamanan terbaik, dan untuk menerima token penyegaran bagi pengguna Anda, gunakan hibah kode otorisasi di aplikasi Anda.  
Permintaan yang berhasil dengan `response_type` `token` pengembalian hibah implisit. Pemberian implisit adalah ID dan token akses yang ditambahkan Amazon Cognito ke URL pengalihan Anda. Hibah implisit kurang aman karena mengekspos token dan informasi identifikasi potensial kepada pengguna. Anda dapat menonaktifkan dukungan untuk hibah implisit dalam konfigurasi klien aplikasi Anda.

**`client_id`**  
Wajib.  
ID klien aplikasi.  
Nilai `client_id` harus berupa ID klien aplikasi di kumpulan pengguna tempat Anda membuat permintaan. Klien aplikasi Anda harus mendukung proses masuk oleh pengguna lokal Amazon Cognito atau setidaknya satu IDP pihak ketiga.

**`redirect_uri`**  
Wajib.  
URL tempat server otentikasi mengalihkan browser setelah Amazon Cognito memberi otorisasi kepada pengguna.  
Pengenal sumber daya seragam pengalihan (URI) harus memiliki atribut berikut:  
+ Ini harus URI mutlak.
+ Anda harus telah melakukan pra-registrasi URI dengan klien.
+ Itu tidak dapat menyertakan komponen fragmen.
Lihat [OAuth 2.0 - Titik Akhir Pengalihan](https://tools.ietf.org/html/rfc6749#section-3.1.2).  
Amazon Cognito mengharuskan URI pengalihan Anda menggunakan HTTPS, kecuali`http://localhost`, yang dapat Anda tetapkan sebagai URL panggilan balik untuk tujuan pengujian.  
Amazon Cognito juga mendukung callback URLs aplikasi seperti. `myapp://example`

**`state`**  
Opsional, direkomendasikan.  
Saat aplikasi Anda menambahkan parameter *status* ke permintaan, Amazon Cognito mengembalikan nilainya ke aplikasi Anda saat `/oauth2/authorize` titik akhir mengalihkan pengguna Anda.  
Tambahkan nilai ini ke permintaan Anda untuk menjaga terhadap serangan [CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery).  
Anda tidak dapat mengatur nilai `state` parameter ke string JSON yang dikodekan URL. Untuk meneruskan string yang cocok dengan format ini dalam `state` parameter, enkodekan string ke base64, lalu dekodekannya di aplikasi Anda.

**`identity_provider`**  
Tidak wajib.  
Tambahkan parameter ini untuk melewati login terkelola dan mengarahkan pengguna Anda ke halaman login penyedia. Nilai parameter *identity\$1provider* adalah nama penyedia identitas (idP) seperti yang muncul di kumpulan pengguna Anda.  
+ Untuk penyedia sosial, Anda dapat menggunakan nilai *identity\$1provider*`Facebook`,,`Google`, `LoginWithAmazon` dan. `SignInWithApple`
+ Untuk kumpulan pengguna Amazon Cognito, gunakan nilainya. `COGNITO`
+ Untuk penyedia identitas SAMP 2.0 dan OpenID Connect (OIDC) (IdPs), gunakan nama yang Anda tetapkan ke iDP di kumpulan pengguna Anda.

**`idp_identifier`**  
Tidak wajib.  
Tambahkan parameter ini untuk mengarahkan ke penyedia dengan nama alternatif untuk nama *identity\$1provider*. Anda dapat memasukkan pengenal untuk SAMP 2.0 dan OIDC Anda IdPs dari menu **penyedia sosial dan eksternal** dari konsol Amazon Cognito.

**`scope`**  
Tidak wajib.  
Dapat menjadi kombinasi dari cakupan sistem cadangan atau cakupan kustom yang terkait dengan klien. Lingkup harus dipisahkan oleh spasi. Cakupan sistem cadangan adalah `openid`, `email`, `phone`, `profile`, dan `aws.cognito.signin.user.admin`. Lingkup yang digunakan harus dikaitkan dengan klien, atau akan diabaikan pada saat waktu aktif.  
Jika klien tidak meminta cakupan apa pun, server autentikasi menggunakan semua cakupan yang terkait dengan klien.  
Token ID hanya dikembalikan jika cakupan `openid` diminta. Token akses hanya dapat digunakan terhadap kolam pengguna Amazon Cognito jika cakupan `aws.cognito.signin.user.admin` diminta. Cakupan `phone`, `email`, dan `profile` hanya dapat diminta jika cakupan `openid` juga diminta. Lingkup ini mendikte klaim yang masuk ke dalam token ID.

**`code_challenge_method`**  
Tidak wajib.  
Protokol hashing yang Anda gunakan untuk menghasilkan tantangan. [PKCE RFC](https://tools.ietf.org/html/rfc7636) mendefinisikan dua metode, S256 dan polos; namun, server autentikasi Amazon Cognito hanya mendukung S256.

**`code_challenge`**  
Tidak wajib.  
Bukti tantangan pertukaran kode kunci (PKCE) yang Anda hasilkan dari. `code_verifier` Untuk informasi selengkapnya, lihat [Menggunakan PKCE dalam hibah kode otorisasi](using-pkce-in-authorization-code.md).  
Diperlukan hanya ketika Anda menentukan `code_challenge_method` parameter.

**`nonce`**  
Tidak wajib.  
Nilai acak yang dapat Anda tambahkan ke permintaan. Nilai nonce yang Anda berikan disertakan dalam token ID yang dikeluarkan Amazon Cognito. Untuk mencegah serangan replay, aplikasi Anda dapat memeriksa `nonce` klaim dalam token ID dan membandingkannya dengan yang Anda buat. Untuk informasi selengkapnya tentang `nonce` klaim, lihat [validasi token ID dalam standar](https://openid.net/specs/openid-connect-core-1_0.html#IDTokenValidation) *OpenID Connect*.

**`lang`**  
Tidak wajib.  
Bahasa yang ingin Anda tampilkan halaman interaktif pengguna. Halaman login terkelola dapat dilokalkan, tetapi halaman UI (klasik) yang dihosting tidak bisa. Untuk informasi selengkapnya, lihat [Pelokalan proses masuk terkelola](cognito-user-pools-managed-login.md#managed-login-localization).

**`login_hint`**  
Tidak wajib.  
Prompt nama pengguna yang ingin Anda teruskan ke server otorisasi. Anda dapat mengumpulkan nama pengguna, alamat email, atau nomor telepon dari pengguna Anda dan mengizinkan penyedia tujuan untuk mengisi nama masuk pengguna terlebih dahulu. Saat Anda mengirimkan `login_hint` parameter dan tidak ada `idp_identifier` atau `identity_provider` parameter ke `oauth2/authorize` titik akhir, login terkelola mengisi bidang nama pengguna dengan nilai petunjuk Anda. Anda juga dapat meneruskan parameter ini ke [Titik akhir masuk](login-endpoint.md) dan secara otomatis mengisi nilai nama pengguna.  
Saat permintaan otorisasi Anda memanggil pengalihan ke OIDC, IdPs Amazon Cognito menambahkan parameter ke permintaan tersebut ke otorisasi pihak `login_hint` ketiga tersebut. Anda tidak dapat meneruskan petunjuk masuk ke SAMP, Apple, Login Dengan Amazon, Google, atau Facebook (Meta). IdPs

**`prompt`**  
Tidak wajib.  
Parameter OIDC yang mengontrol perilaku otentikasi untuk sesi yang ada. Hanya tersedia dalam versi branding login terkelola, bukan di UI host klasik. Untuk informasi selengkapnya dari spesifikasi OIDC, lihat Permintaan [otentikasi](https://openid.net/specs/openid-connect-core-1_0.html#AuthRequest). Nilai `none` dan `login` memiliki efek pada perilaku otentikasi kumpulan pengguna.  
Amazon Cognito meneruskan semua nilai `prompt` kecuali `none` ke Anda IdPs saat pengguna memilih otentikasi dengan penyedia pihak ketiga. Ini benar ketika URL yang diakses pengguna menyertakan `idp_identifier` parameter `identity_provider` atau, atau ketika server otorisasi mengarahkan mereka ke dan mereka memilih [Titik akhir masuk](login-endpoint.md) dan IDP dari tombol yang tersedia.  
**Nilai parameter prompt**    
`prompt=none`  
Amazon Cognito diam-diam melanjutkan otentikasi untuk pengguna yang memiliki sesi otentikasi yang valid. Dengan prompt ini, pengguna dapat secara diam-diam mengautentikasi antara klien aplikasi yang berbeda di kumpulan pengguna Anda. Jika pengguna belum diautentikasi, server otorisasi mengembalikan kesalahan. `login_required`  
`prompt=login`  
Amazon Cognito mengharuskan pengguna untuk mengautentikasi ulang meskipun mereka memiliki sesi yang sudah ada. Kirim nilai ini saat Anda ingin memverifikasi identitas pengguna lagi. Pengguna yang diautentikasi yang memiliki sesi yang sudah ada dapat kembali masuk tanpa membatalkan sesi tersebut. Saat pengguna yang memiliki sesi yang sudah ada masuk lagi, Amazon Cognito memberi mereka cookie sesi baru. Parameter ini juga dapat diteruskan ke Anda. IdPs IdPsyang menerima parameter ini juga meminta upaya otentikasi baru dari pengguna.  
`prompt=select_account`  
Nilai ini tidak berpengaruh pada login lokal dan harus dikirimkan dalam permintaan yang dialihkan ke. IdPs Ketika disertakan dalam permintaan otorisasi Anda, parameter ini menambahkan `prompt=select_account` ke jalur URL untuk tujuan pengalihan iDP. Saat IdPs mendukung parameter ini, mereka meminta pengguna memilih akun yang ingin mereka masuki.  
`prompt=consent`  
Nilai ini tidak berpengaruh pada login lokal dan harus dikirimkan dalam permintaan yang dialihkan ke. IdPs Ketika disertakan dalam permintaan otorisasi Anda, parameter ini menambahkan `prompt=consent` ke jalur URL untuk tujuan pengalihan iDP. Saat IdPs mendukung parameter ini, mereka meminta persetujuan pengguna sebelum mengarahkan kembali ke kumpulan pengguna Anda. 
Ketika Anda menghilangkan `prompt` parameter dari permintaan Anda, login terkelola mengikuti perilaku default: pengguna harus masuk kecuali browser mereka memiliki cookie sesi login terkelola yang valid. Anda dapat menggabungkan beberapa nilai `prompt` dengan pembatas karakter spasi, misalnya. `prompt=login consent`

**`resource`**  
Tidak wajib.  
Pengidentifikasi sumber daya yang ingin Anda ikat ke token akses dalam klaim. `aud` Saat Anda menyertakan parameter ini, Amazon Cognito memvalidasi bahwa nilainya adalah URL dan menetapkan pemirsa token akses yang dihasilkan ke sumber daya yang diminta. Anda dapat meminta [server sumber daya](cognito-user-pools-define-resource-servers.md) kumpulan pengguna dengan pengenal dalam format URL, atau URL pilihan Anda. Nilai untuk parameter ini harus dimulai dengan`https://`,`http://localhost`, atau skema URL kustom seperti`myapp://`.  
Pengikatan sumber daya didefinisikan dalam [RFC 8707](https://www.rfc-editor.org/rfc/rfc8707.html). Untuk informasi selengkapnya tentang server sumber daya dan pengikatan sumber daya, lihat [Pengikatan sumber daya](cognito-user-pools-define-resource-servers.md#cognito-user-pools-resource-binding).

## Contoh: hibah kode otorisasi
<a name="sample-authorization-code-grant"></a>

Ini adalah contoh permintaan untuk hibah kode otorisasi.

Permintaan berikut memulai sesi untuk mengambil kode otorisasi yang diteruskan pengguna ke aplikasi Anda di tujuan. `redirect_uri` Sesi ini meminta cakupan atribut pengguna dan akses ke operasi API layanan mandiri Amazon Cognito.

```
GET https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize?
response_type=code&
client_id=1example23456789&
redirect_uri=https://www.example.com&
state=abcdefg&
scope=openid+profile+aws.cognito.signin.user.admin
```

Server autentikasi Amazon Cognito mengalihkan kembali ke aplikasi Anda dengan kode otorisasi dan status. Kode otorisasi berlaku selama lima menit.

```
HTTP/1.1 302 Found
Location: https://www.example.com?code=a1b2c3d4-5678-90ab-cdef-EXAMPLE11111&state=abcdefg
```

## Contoh: hibah kode otorisasi dengan PKCE
<a name="sample-authorization-code-grant-with-pkce"></a>

Alur contoh ini melakukan hibah kode otorisasi dengan [PKCE](using-pkce-in-authorization-code.md#using-pkce-in-authorization-code.title).

Permintaan ini menambahkan `code_challenge` parameter. Untuk menyelesaikan pertukaran kode untuk token, Anda harus menyertakan `code_verifier` parameter dalam permintaan Anda ke `/oauth2/token` titik akhir.

```
GET https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize?
response_type=code&
client_id=1example23456789&
redirect_uri=https://www.example.com&
state=abcdefg&
scope=aws.cognito.signin.user.admin&
code_challenge_method=S256&
code_challenge=a1b2c3d4...
```

Server otorisasi mengalihkan kembali ke aplikasi Anda dengan kode otorisasi dan status. Aplikasi Anda memproses kode otorisasi dan menukarnya dengan token.

```
HTTP/1.1 302 Found
Location: https://www.example.com?code=a1b2c3d4-5678-90ab-cdef-EXAMPLE11111&state=abcdefg
```

## Contoh: memerlukan otentikasi ulang dengan `prompt=login`
<a name="sample-authorization-code-with-prompt-login"></a>

Permintaan berikut menambahkan `prompt=login` parameter yang mengharuskan pengguna untuk mengautentikasi lagi, bahkan jika mereka memiliki sesi yang sudah ada.

```
GET https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize?
response_type=code&
client_id=1example23456789&
redirect_uri=https://www.example.com&
state=abcdefg&
scope=openid+profile+aws.cognito.signin.user.admin&
prompt=login
```

Server otorisasi mengalihkan ke [titik akhir login](login-endpoint.md), yang membutuhkan autentikasi ulang.

```
HTTP/1.1 302 Found Location: https://mydomain.auth.us-east-1.amazoncognito.com/login?response_type=code&client_id=1example23456789&redirect_uri=https://www.example.com&state=abcdefg&scope=openid+profile+aws.cognito.signin.user.admin&prompt=login
```

## Contoh: otentikasi senyap dengan `prompt=none`
<a name="sample-authorization-code-with-prompt-none"></a>

Permintaan berikut menambahkan `prompt=none` parameter yang diam-diam memeriksa apakah pengguna memiliki sesi yang valid.

```
GET https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize?
response_type=code&
client_id=1example23456789&
redirect_uri=https://www.example.com&
state=abcdefg&
scope=openid+profile+aws.cognito.signin.user.admin&
prompt=none
```

Ketika tidak ada sesi yang valid, server otorisasi mengembalikan kesalahan ke URI pengalihan

```
HTTP/1.1 302 Found Location: https://www.example.com?error=login_required&state=abcdefg
```

Ketika sesi yang valid ada, server otorisasi mengembalikan kode otorisasi.

```
HTTP/1.1 302 Found Location: https://www.example.com?code=AUTHORIZATION_CODE&state=abcdefg
```

## Contoh: pemberian kode otorisasi dengan pengikatan sumber daya
<a name="sample-authorization-code-with-resource-binding"></a>

Permintaan berikut menambahkan `resource` parameter untuk mengikat token akses ke server sumber daya tertentu. Token akses yang dihasilkan menciptakan kondisi untuk API target untuk memvalidasi bahwa itu adalah audiens yang dituju dari permintaan pengguna yang diautentikasi.

```
GET https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize?
response_type=code&
client_id=1example23456789&
redirect_uri=https://www.example.com&
state=abcdefg&
scope=solar-system-data-api.example.com/asteroids.add&
resource=https://solar-system-data-api.example.com
```

Server otorisasi mengembalikan kode otorisasi yang menghasilkan token akses dengan `aud` klaim. `https://solar-system-data-api.example.com`

```
HTTP/1.1 302 Found Location: https://www.example.com?code=AUTHORIZATION_CODE&state=abcdefg
```

## Contoh: Hibah Token (implisit) tanpa ruang lingkup `openid`
<a name="sample-token-grant-without-openid-scope"></a>

Alur contoh ini menghasilkan hibah implisit dan kembali JWTs langsung ke sesi pengguna.

Permintaan ini untuk hibah implisit dari server otorisasi Anda. Ini meminta cakupan dalam token akses yang mengotorisasi operasi layanan mandiri profil pengguna.

```
GET https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize?
response_type=token&
client_id=1example23456789&
redirect_uri=https://www.example.com&
state=abcdefg&
scope=aws.cognito.signin.user.admin
```

Server otorisasi mengalihkan kembali ke aplikasi Anda hanya dengan token akses. Karena `openid` cakupan tidak diminta, Amazon Cognito tidak mengembalikan token ID. Selain itu, Amazon Cognito tidak mengembalikan token penyegaran dalam aliran ini.

```
HTTP/1.1 302 Found
Location: https://example.com/callback#access_token=eyJra456defEXAMPLE&token_type=bearer&expires_in=3600&state=STATE
```

## Contoh: Hibah Token (implisit) dengan ruang lingkup `openid`
<a name="sample-token-grant-with-openid-scope"></a>

Alur contoh ini menghasilkan hibah implisit dan mengembalikan token ke browser pengguna.

Permintaan ini untuk hibah implisit dari server otorisasi Anda. Ini meminta cakupan dalam token akses yang mengotorisasi akses ke atribut pengguna dan operasi swalayan.

```
GET
https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize? 
response_type=token& 
client_id=1example23456789& 
redirect_uri=https://www.example.com& 
state=abcdefg&
scope=aws.cognito.signin.user.admin+openid+profile
```

Server otorisasi mengalihkan kembali ke aplikasi Anda dengan token akses dan token ID (karena `openid` cakupan disertakan):

```
HTTP/1.1 302 Found
Location: https://www.example.com#id_token=eyJra67890EXAMPLE&access_token=eyJra12345EXAMPLE&token_type=bearer&expires_in=3600&state=abcdefg
```

## Contoh tanggapan negatif
<a name="get-authorize-negative"></a>

Amazon Cognito mungkin menolak permintaan Anda. Permintaan negatif datang dengan kode kesalahan HTTP dan deskripsi yang dapat Anda gunakan untuk memperbaiki parameter permintaan Anda. Berikut ini adalah contoh tanggapan negatif.
+ `redirect_uri`Jika `client_id` dan valid, tetapi parameter permintaan tidak diformat dengan benar, server otentikasi mengalihkan kesalahan ke klien `redirect_uri` dan menambahkan pesan kesalahan dalam parameter URL. Berikut ini adalah contoh pemformatan yang salah.
  + Permintaan tidak menyertakan `response_type` parameter.
  + Permintaan otorisasi menyediakan `code_challenge` parameter, tetapi bukan `code_challenge_method` parameter.
  + Nilai `code_challenge_method` parameternya tidak`S256`.

  Berikut ini adalah respons terhadap permintaan contoh dengan format yang salah.

  ```
  HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_request
  ```
+ Jika klien meminta `code` atau `token` masuk`response_type`, tetapi tidak memiliki izin untuk permintaan ini, server otorisasi Amazon Cognito kembali `unauthorized_client` ke klien`redirect_uri`, sebagai berikut:

  ```
  HTTP 1.1 302 Found Location: https://client_redirect_uri?error=unauthorized_client
  ```
+  Jika klien meminta cakupan yang tidak diketahui, cacat, atau tidak valid, server otorisasi Amazon Cognito `invalid_scope` kembali ke `redirect_uri` klien, sebagai berikut: 

  ```
  HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_scope
  ```
+ Jika ada kesalahan tak terduga di server, server otentikasi kembali `server_error` ke klien. `redirect_uri` Karena kesalahan HTTP 500 tidak dikirim ke klien, kesalahan tidak ditampilkan di browser pengguna. Server otorisasi mengembalikan kesalahan berikut.

  ```
  HTTP 1.1 302 Found Location: https://client_redirect_uri?error=server_error
  ```
+ Saat Amazon Cognito mengautentikasi melalui federasi ke pihak ketiga, Amazon IdPs Cognito mungkin mengalami masalah koneksi, seperti berikut ini:
  + Jika batas waktu koneksi terjadi saat meminta token dari IDP, server otentikasi mengalihkan kesalahan ke klien sebagai berikut: `redirect_uri`

    ```
    HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_request&error_description=Timeout+occurred+in+calling+IdP+token+endpoint
    ```
  + Jika batas waktu koneksi terjadi saat memanggil `jwks_uri` titik akhir untuk validasi token ID, server otentikasi mengalihkan dengan kesalahan ke klien sebagai berikut: `redirect_uri`

    ```
    HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_request&error_description=error_description=Timeout+in+calling+jwks+uri
    ```
+ Saat mengautentikasi dengan mengfederasi ke pihak ketiga IdPs, penyedia dapat mengembalikan respons kesalahan. Ini bisa disebabkan oleh kesalahan konfigurasi atau alasan lain, seperti berikut ini:
  + Jika respons kesalahan diterima dari penyedia lain, server autentikasi mengalihkan kesalahan ke `redirect_uri` klien sebagai berikut:

    ```
    HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_request&error_description=[IdP name]+Error+-+[status code]+error getting token
    ```
  + Jika respons kesalahan diterima dari Google, server otentikasi mengalihkan kesalahan ke klien `redirect_uri` sebagai berikut: 

    ```
    HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_request&error_description=Google+Error+-+[status code]+[Google-provided error code]
    ```
+ Saat Amazon Cognito menemukan pengecualian komunikasi saat terhubung ke iDP eksternal, server autentikasi mengalihkan dengan kesalahan ke klien dengan salah satu pesan berikut: `redirect_uri`
  + 

    ```
    HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_request&error_description=Connection+reset
    ```
  + 

    ```
    HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_request&error_description=Read+timed+out
    ```

# Titik akhir penerbit token
<a name="token-endpoint"></a>

[Titik akhir token OAuth ](https://www.rfc-editor.org/rfc/rfc6749#section-3.2) 2.0 pada `/oauth2/token` mengeluarkan token web JSON (JWTs) ke aplikasi yang ingin menyelesaikan alur hibah kode otorisasi dan kredensyal klien. Token ini adalah hasil akhir dari otentikasi dengan kumpulan pengguna. Mereka berisi informasi tentang pengguna (token ID), tingkat akses pengguna (token akses), dan hak pengguna untuk mempertahankan sesi masuk mereka (token penyegaran). Library relying-party OpenID Connect (OIDC) menangani permintaan dan muatan respons dari titik akhir ini. Token memberikan bukti otentikasi yang dapat diverifikasi, informasi profil, dan mekanisme untuk akses ke sistem back-end.

Server otorisasi kumpulan pengguna OAuth 2.0 Anda mengeluarkan token web JSON (JWTs) dari titik akhir token ke jenis sesi berikut:

1. Pengguna yang telah menyelesaikan permintaan untuk pemberian kode otorisasi. Penukaran kode yang berhasil mengembalikan ID, akses, dan token penyegaran.

1. Machine-to-machine (M2M) sesi yang telah menyelesaikan hibah kredensial-klien. Otorisasi yang berhasil dengan rahasia klien mengembalikan token akses.

1. Pengguna yang sebelumnya telah masuk dan menerima token penyegaran. Segarkan otentikasi token mengembalikan ID baru dan token akses.
**catatan**  
Pengguna yang masuk dengan pemberian kode otorisasi dalam login terkelola atau melalui federasi selalu dapat menyegarkan token mereka dari titik akhir token. Pengguna yang masuk dengan operasi API `InitiateAuth` dan `AdminInitiateAuth` dapat menyegarkan token mereka dengan titik akhir token saat [perangkat yang diingat](amazon-cognito-user-pools-device-tracking.md) *tidak* aktif di kumpulan pengguna Anda. Jika perangkat yang diingat aktif, segarkan token dengan [operasi penyegaran token API atau SDK yang relevan untuk klien aplikasi](amazon-cognito-user-pools-using-the-refresh-token.md#using-the-refresh-token-api) Anda.

Titik akhir token menjadi tersedia untuk umum saat Anda menambahkan domain ke kumpulan pengguna Anda. Ia menerima permintaan HTTP POST. Untuk keamanan aplikasi, gunakan PKCE dengan peristiwa login kode otorisasi Anda. PKCE memverifikasi bahwa pengguna yang melewati kode otorisasi adalah pengguna yang sama yang diautentikasi. Untuk informasi lebih lanjut tentang PKCE, lihat [IETF](https://datatracker.ietf.org/doc/html/rfc7636) RFC 7636.

Anda dapat mempelajari lebih lanjut tentang klien aplikasi kumpulan pengguna dan jenis hibah, rahasia klien, cakupan yang diizinkan, dan klien IDs di[Pengaturan khusus aplikasi dengan klien aplikasi](user-pool-settings-client-apps.md). Anda dapat mempelajari lebih lanjut tentang otorisasi M2M, hibah kredensi klien, dan otorisasi dengan cakupan token akses di. [Lingkup, M2M, dan server sumber daya](cognito-user-pools-define-resource-servers.md)

Untuk mengambil informasi tentang pengguna dari token akses mereka, teruskan ke permintaan Anda [Titik akhir UserInfo](userinfo-endpoint.md) atau ke [https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUser.html](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUser.html)API. Token akses harus berisi cakupan yang sesuai untuk permintaan ini,

## Format permintaan POST ke titik akhir token
<a name="post-token"></a>

Titik akhir `/oauth2/token` hanya mendukung `HTTPS POST`. Titik akhir ini tidak interaktif pengguna. Menangani permintaan token dengan [pustaka OpenID Connect (OIDC)](https://openid.net/developers/certified-openid-connect-implementations/) di aplikasi Anda.

Titik akhir token mendukung `client_secret_basic` dan `client_secret_post` otentikasi. Untuk informasi selengkapnya tentang spesifikasi OIDC, lihat Otentikasi [Klien](https://openid.net/specs/openid-connect-core-1_0.html#ClientAuthentication). Untuk informasi selengkapnya tentang titik akhir token dari spesifikasi OpenID Connect[, lihat](http://openid.net/specs/openid-connect-core-1_0.html#TokenEndpoint) Titik Akhir Token.

### Minta parameter di header
<a name="post-token-request-parameters"></a>

Anda dapat meneruskan parameter berikut di header permintaan Anda ke titik akhir token.

**`Authorization`**  
Jika klien dikeluarkan rahasia, klien dapat melewati `client_id` dan `client_secret` di header otorisasi sebagai otorisasi `client_secret_basic` HTTP. Anda juga dapat memasukkan `client_id` dan `client_secret` dalam badan permintaan sebagai `client_secret_post` otorisasi.  
String header otorisasi adalah [Basic](https://en.wikipedia.org/wiki/Basic_access_authentication#Client_side)`Base64Encode(client_id:client_secret)`. Contoh berikut adalah header otorisasi untuk klien aplikasi `djc98u3jiedmi283eu928` dengan rahasia klien`abcdef01234567890`, menggunakan versi string yang dienkode Base64: `djc98u3jiedmi283eu928:abcdef01234567890`  

```
Authorization: Basic ZGpjOTh1M2ppZWRtaTI4M2V1OTI4OmFiY2RlZjAxMjM0NTY3ODkw
```

**`Content-Type`**  
Tetapkan nilai parameter ini ke`'application/x-www-form-urlencoded'`.

### Minta parameter dalam tubuh
<a name="post-token-request-parameters-in-body"></a>

Berikut ini adalah parameter yang dapat Anda minta dalam `x-www-form-urlencoded` format di badan permintaan ke titik akhir token.

**`grant_type`**  
*Diperlukan.*  
Jenis hibah OIDC yang ingin Anda minta.  
Harus `authorization_code` atau `refresh_token` atau `client_credentials`. Anda dapat meminta token akses untuk cakupan kustom dari titik akhir token dalam kondisi berikut:  
+ Anda mengaktifkan cakupan yang diminta dalam konfigurasi klien aplikasi Anda.
+ Anda mengonfigurasi klien aplikasi Anda dengan rahasia klien.
+ Anda mengaktifkan pemberian kredensi klien di klien aplikasi Anda.
Titik akhir token mengembalikan token penyegaran hanya jika `grant_type` ada`authorization_code`.

**`client_id`**  
*Opsional. Tidak diperlukan saat Anda memberikan ID klien aplikasi di `Authorization` header.*  
ID klien aplikasi di kumpulan pengguna Anda. Tentukan klien aplikasi yang sama yang mengautentikasi pengguna Anda.  
Anda harus memberikan parameter ini jika klien bersifat publik dan tidak memiliki rahasia, atau dengan `client_secret` `client_secret_post` otorisasi.

**`client_secret`**  
*Opsional. Tidak diperlukan saat Anda memberikan rahasia klien di `Authorization` header dan ketika klien aplikasi tidak memiliki rahasia.*  
Rahasia klien aplikasi, jika klien aplikasi memilikinya, untuk `client_secret_post` otorisasi.

**`scope`**  
*Opsional.*  
Dapat berupa kombinasi cakupan apa pun yang terkait dengan klien aplikasi Anda. Amazon Cognito mengabaikan cakupan dalam permintaan yang tidak diizinkan untuk klien aplikasi yang diminta. Jika Anda tidak memberikan parameter permintaan ini, server otorisasi akan mengembalikan `scope` klaim token akses dengan semua cakupan otorisasi yang Anda aktifkan dalam konfigurasi klien aplikasi Anda. Anda dapat meminta cakupan apa pun yang diizinkan untuk klien aplikasi yang diminta: cakupan standar, cakupan khusus dari server sumber daya, dan cakupan layanan mandiri `aws.cognito.signin.user.admin` pengguna.

**`redirect_uri`**  
*Opsional. Tidak diperlukan untuk hibah kredensial-klien.*  
Harus sama dengan `redirect_uri` yang digunakan untuk mendapatkan `authorization_code` di `/oauth2/authorize`.  
Anda harus memberikan parameter ini jika `grant_type` ada`authorization_code`.

**`refresh_token`**  
*Opsional. Digunakan hanya ketika pengguna sudah memiliki token penyegaran dan ingin mendapatkan ID baru dan token akses.*  
Untuk menghasilkan token akses dan ID baru untuk sesi pengguna, tetapkan nilai `refresh_token` ke token penyegaran valid yang dikeluarkan klien aplikasi yang diminta.  
Mengembalikan token penyegaran baru dengan ID baru dan token akses saat [rotasi token refresh](amazon-cognito-user-pools-using-the-refresh-token.md#using-the-refresh-token-rotation) aktif, jika tidak, hanya mengembalikan ID dan token akses. Jika token akses asli [terikat ke sumber daya API](cognito-user-pools-define-resource-servers.md#cognito-user-pools-resource-binding), token akses baru mempertahankan url API yang diminta dalam `aud` klaim.

**`code`**  
*Opsional. Hanya diperlukan dalam hibah kode otorisasi.*  
Kode otorisasi dari hibah kode otorisasi. Anda harus memberikan parameter ini jika permintaan otorisasi Anda termasuk a`grant_type`. `authorization_code`

**`aws_client_metadata`**  
*Opsional.*  
Informasi yang ingin Anda teruskan ke aliran otorisasi [Pemicu Lambda generasi pra token](user-pool-lambda-pre-token-generation.md) in [machine-to-machine (M2M)](cognito-user-pools-define-resource-servers.md). Aplikasi Anda dapat mengumpulkan informasi konteks tentang sesi dan meneruskannya dalam parameter ini. Saat Anda meneruskan format `aws_client_metadata` JSON yang disandikan URL, Amazon Cognito menyertakannya dalam peristiwa input ke fungsi Lambda pemicu Anda. Versi peristiwa pemicu pra token atau versi pemicu Lambda global Anda harus dikonfigurasi untuk versi tiga atau yang lebih baru. Meskipun Amazon Cognito menerima permintaan ke titik akhir ini dalam kode otorisasi dan alur M2M kredensyal klien, kumpulan pengguna Anda hanya diteruskan `aws_client_metadata` ke pemicu pembuatan token pra dari permintaan kredensyal klien.

**`code_verifier`**  
Tidak wajib. Diperlukan hanya jika Anda memberikan `code_challenge_method` dan `code_challenge` parameter dalam permintaan otorisasi awal Anda.  
[Pemverifikasi kode yang dihasilkan `code_challenge` dari aplikasi Anda dalam permintaan hibah kode otorisasi dengan PKCE.](using-pkce-in-authorization-code.md)

## Menukar kode otorisasi untuk token
<a name="post-token-positive-exchanging-authorization-code-for-tokens"></a>

Permintaan berikut berhasil menghasilkan ID, akses, dan token penyegaran setelah otentikasi dengan hibah kode otorisasi. Permintaan melewati rahasia klien dalam `client_secret_basic` format di `Authorization` header.

```
POST https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/token&
Content-Type='application/x-www-form-urlencoded'&
Authorization=Basic ZGpjOTh1M2ppZWRtaTI4M2V1OTI4OmFiY2RlZjAxMjM0NTY3ODkw

grant_type=authorization_code&
client_id=1example23456789&
code=AUTHORIZATION_CODE&
redirect_uri=com.myclientapp://myclient/redirect
```

Respons mengeluarkan ID baru, akses, dan token penyegaran kepada pengguna, dengan metadata tambahan.

```
HTTP/1.1 200 OK
Content-Type: application/json

{
    "access_token": "eyJra1example",
    "id_token": "eyJra2example",
    "refresh_token": "eyJj3example",
    "token_type": "Bearer",
    "expires_in": 3600
}
```

## Kredensi klien dengan otorisasi dasar
<a name="exchanging-client-credentials-for-an-access-token-in-request-body"></a>

Permintaan berikut dari aplikasi M2M meminta hibah kredensil klien. Karena kredensi klien memerlukan rahasia klien, permintaan tersebut diotorisasi dengan `Authorization` header yang berasal dari ID klien aplikasi dan rahasia. Permintaan menghasilkan token akses dengan dua cakupan yang diminta. Permintaan ini juga mencakup metadata klien yang menyediakan informasi alamat IP dan token yang dikeluarkan untuk pengguna yang memberikan hibah ini atas nama. Amazon Cognito meneruskan metadata klien ke pemicu Lambda generasi pra token.

```
POST https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/token >
Content-Type='application/x-www-form-urlencoded'&
Authorization=Basic ZGpjOTh1M2ppZWRtaTI4M2V1OTI4OmFiY2RlZjAxMjM0NTY3ODkw

grant_type=client_credentials&
client_id=1example23456789&
scope=resourceServerIdentifier1%2Fscope1%20resourceServerIdentifier2%2Fscope2&
&aws_client_metadata=%7B%22onBehalfOfToken%22%3A%22eyJra789ghiEXAMPLE%22,%20%22ClientIpAddress%22%3A%22192.0.2.252%22%7D
```

Amazon Cognito meneruskan peristiwa input berikut ke pemicu Lambda pembuatan token pra.

```
{
    version: '3',
    triggerSource: 'TokenGeneration_ClientCredentials',
    region: 'us-east-1',
    userPoolId: 'us-east-1_EXAMPLE',
    userName: 'ClientCredentials',
    callerContext: {
        awsSdkVersion: 'aws-sdk-unknown-unknown',
        clientId: '1example23456789'
    },
    request: {
        userAttributes: {},
        groupConfiguration: null,
        scopes: [
           'resourceServerIdentifier1/scope1',
           'resourceServerIdentifier2/scope2'
        ],
        clientMetadata: {
            'onBehalfOfToken': 'eyJra789ghiEXAMPLE',
            'ClientIpAddress': '192.0.2.252'
        }
    },
    response: { claimsAndScopeOverrideDetails: null }
}
```

Respons mengembalikan token akses. Hibah kredensi klien adalah untuk otorisasi machine-to-machine (M2M) dan hanya token akses kembali.

```
HTTP/1.1 200 OK
Content-Type: application/json
{
    "access_token": "eyJra1example",
    "token_type": "Bearer",
    "expires_in": 3600
}
```

## Kredensi klien dengan otorisasi badan POST
<a name="post-token-positive-exchanging-client-credentials-for-an-access-token-in-request-body"></a>

Permintaan hibah kredensial-klien berikut menyertakan `client_secret` parameter dalam badan permintaan dan tidak menyertakan header. `Authorization` Permintaan ini menggunakan sintaks `client_secret_post` otorisasi. Permintaan menghasilkan token akses dengan cakupan yang diminta. Permintaan ini juga mencakup metadata klien yang menyediakan informasi alamat IP dan token yang dikeluarkan untuk pengguna yang memberikan hibah ini atas nama. Amazon Cognito meneruskan metadata klien ke pemicu Lambda generasi pra token.

```
POST /oauth2/token HTTP/1.1
Content-Type: application/x-www-form-urlencoded
X-Amz-Target: AWSCognitoIdentityProviderService.Client credentials request
User-Agent: USER_AGENT
Accept: /
Accept-Encoding: gzip, deflate, br
Content-Length: 177
Referer: http://auth.example.com/oauth2/token
Host: auth.example.com
Connection: keep-alive

grant_type=client_credentials&
client_id=1example23456789&
scope=my_resource_server_identifier%2Fmy_custom_scope&
client_secret=9example87654321&
aws_client_metadata=%7B%22onBehalfOfToken%22%3A%22eyJra789ghiEXAMPLE%22,%20%22ClientIpAddress%22%3A%22192.0.2.252%22%7D
```

Amazon Cognito meneruskan peristiwa input berikut ke pemicu Lambda pembuatan token pra.

```
{
    version: '3',
    triggerSource: 'TokenGeneration_ClientCredentials',
    region: 'us-east-1',
    userPoolId: 'us-east-1_EXAMPLE',
    userName: 'ClientCredentials',
    callerContext: {
        awsSdkVersion: 'aws-sdk-unknown-unknown',
        clientId: '1example23456789'
    },
    request: {
        userAttributes: {},
        groupConfiguration: null,
        scopes: [
           'resourceServerIdentifier1/my_custom_scope'
        ],
        clientMetadata: {
            'onBehalfOfToken': 'eyJra789ghiEXAMPLE',
            'ClientIpAddress': '192.0.2.252'
        }
    },
    response: { claimsAndScopeOverrideDetails: null }
}
```

Respons mengembalikan token akses. Hibah kredensi klien adalah untuk otorisasi machine-to-machine (M2M) dan hanya token akses kembali.

```
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Date: Tue, 05 Dec 2023 16:11:11 GMT
x-amz-cognito-request-id: 829f4fe2-a1ee-476e-b834-5cd85c03373b

{
    "access_token": "eyJra12345EXAMPLE",
    "expires_in": 3600,
    "token_type": "Bearer"
}
```

## Pemberian kode otorisasi dengan PKCE
<a name="post-token-positive-exchanging-authorization-code-grant-with-pkce-for-tokens"></a>

[Contoh permintaan berikut melengkapi permintaan otorisasi yang disertakan `code_challenge_method` dan `code_challenge` parameter dalam permintaan hibah kode otorisasi dengan PKCE.](using-pkce-in-authorization-code.md)

```
POST https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/token
Content-Type='application/x-www-form-urlencoded'&
Authorization=Basic ZGpjOTh1M2ppZWRtaTI4M2V1OTI4OmFiY2RlZjAxMjM0NTY3ODkw

grant_type=authorization_code&
client_id=1example23456789&
code=AUTHORIZATION_CODE&
code_verifier=CODE_VERIFIER&
redirect_uri=com.myclientapp://myclient/redirect
```

Respons mengembalikan ID, akses, dan token refresh dari verifikasi PKCE yang berhasil oleh aplikasi.

```
HTTP/1.1 200 OK
Content-Type: application/json

{
    "access_token": "eyJra1example",
    "id_token": "eyJra2example",
    "refresh_token": "eyJj3example",
    "token_type": "Bearer",
    "expires_in": 3600
}
```

## Penyegaran token tanpa menyegarkan rotasi token
<a name="post-token-positive-exchanging-a-refresh-token-for-tokens"></a>

Contoh permintaan berikut menyediakan token penyegaran ke klien aplikasi di mana [rotasi token refresh](amazon-cognito-user-pools-using-the-refresh-token.md#using-the-refresh-token-rotation) tidak aktif. Karena klien aplikasi memiliki rahasia klien, permintaan menyediakan `Authorization` header.

```
POST https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/token >
Content-Type='application/x-www-form-urlencoded'&
Authorization=Basic ZGpjOTh1M2ppZWRtaTI4M2V1OTI4OmFiY2RlZjAxMjM0NTY3ODkw

grant_type=refresh_token&
client_id=1example23456789&
refresh_token=eyJj3example
```

Respons mengembalikan ID baru dan token akses.

```
HTTP/1.1 200 OK
Content-Type: application/json

{
    "access_token": "eyJra1example",
    "id_token": "eyJra2example",
    "token_type": "Bearer",
    "expires_in": 3600
}
```

## Penyegaran token dengan rotasi token penyegaran
<a name="post-token-positive-refresh-token-rotation"></a>

Contoh permintaan berikut menyediakan token penyegaran ke klien aplikasi tempat [rotasi token refresh](amazon-cognito-user-pools-using-the-refresh-token.md#using-the-refresh-token-rotation) aktif. Karena klien aplikasi memiliki rahasia klien, permintaan menyediakan `Authorization` header.

```
POST https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/token >
Content-Type='application/x-www-form-urlencoded'&
Authorization=Basic ZGpjOTh1M2ppZWRtaTI4M2V1OTI4OmFiY2RlZjAxMjM0NTY3ODkw

grant_type=refresh_token&
client_id=1example23456789&
refresh_token=eyJj3example
```

Respons mengembalikan ID baru, akses, dan token refresh.

```
HTTP/1.1 200 OK
Content-Type: application/json

{
    "access_token": "eyJra1example",
    "id_token": "eyJra2example",
    "refresh_token": "eyJj4example",
    "token_type": "Bearer",
    "expires_in": 3600
}
```

## Contoh tanggapan negatif
<a name="post-token-negative"></a>

Permintaan yang salah bentuk menghasilkan kesalahan dari titik akhir token. Berikut ini adalah peta umum badan respons saat permintaan token menghasilkan kesalahan.

```
HTTP/1.1 400 Bad Request
Content-Type: application/json;charset=UTF-8

{
"error":"invalid_request|invalid_client|invalid_grant|unauthorized_client|unsupported_grant_type"
}
```

**`invalid_request`**  
Permintaan tidak memiliki parameter yang diperlukan, menyertakan nilai parameter yang tidak didukung (selain `unsupported_grant_type`), atau formatnya salah. Misalnya, `grant_type` adalah `refresh_token` tetapi `refresh_token` tidak disertakan. 

**`invalid_client`**  
Autentikasi klien gagal. Misalnya, ketika klien menyertakan `client_id` dan `client_secret` di header otorisasi, tetapi tidak ada klien dengan `client_id` dan `client_secret` itu. 

**`invalid_grant`**  
Token refresh telah dicabut.   
Kode otorisasi telah digunakan atau tidak ada.   
Klien aplikasi tidak memiliki akses baca ke semua [atribut](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-attributes.html) dalam lingkup yang diminta. Misalnya, aplikasi Anda meminta `email` cakupan dan klien aplikasi Anda dapat membaca `email` atribut, tetapi tidak`email_verified`.

**`unauthorized_client`**  
Klien tidak diperbolehkan untuk alur pemberian kode atau untuk untuk menyegarkan token. 

**`unsupported_grant_type`**  
Dikembalikan jika `grant_type` ada sesuatu selain `authorization_code` atau `refresh_token` atau`client_credentials`. 

# Atribut pengguna endpoint
<a name="userinfo-endpoint"></a>

Jika OIDC mengeluarkan token ID yang berisi atribut pengguna, OAuth 2.0 mengimplementasikan titik akhir. `/oauth2/userInfo` Pengguna atau klien yang diautentikasi menerima token akses dengan `scopes` klaim. Klaim ini menentukan atribut yang harus dikembalikan oleh server otorisasi. Saat aplikasi menyajikan token akses ke `userInfo` titik akhir, server otorisasi mengembalikan badan respons yang berisi atribut pengguna yang berada dalam batas yang ditetapkan oleh cakupan token akses. Aplikasi Anda dapat mengambil informasi tentang pengguna dari `userInfo` titik akhir selama memegang token akses yang valid dengan setidaknya klaim `openid` cakupan.

Titik `userInfo` akhir adalah titik akhir UserInfo OpenID Connect ([OIDC](https://openid.net/specs/openid-connect-core-1_0.html#UserInfo)). Ini merespons dengan atribut pengguna ketika penyedia layanan menyajikan token akses yang dikeluarkan [titik akhir token](token-endpoint.md) Anda. Cakupan dalam token akses pengguna Anda menentukan atribut pengguna yang ditampilkan oleh titik akhir UserInfo dalam responsnya. Ruang `openid` lingkup harus menjadi salah satu klaim token akses.

Amazon Cognito mengeluarkan token akses sebagai respons terhadap permintaan API kumpulan pengguna seperti. [https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html) Karena tidak mengandung cakupan apa pun, userInfo titik akhir tidak menerima token akses ini. Sebagai gantinya, Anda harus menunjukkan token akses dari titik akhir token Anda.

Penyedia identitas pihak ketiga OAuth 2.0 (iDP) Anda juga menghosting titik akhir. userInfo Saat pengguna Anda mengautentikasi dengan IDP tersebut, Amazon Cognito secara diam-diam menukar kode otorisasi dengan endpoint iDP. `token` Kumpulan pengguna Anda meneruskan token akses iDP untuk mengotorisasi pengambilan informasi pengguna dari titik akhir iDP. `userInfo`

Cakupan dalam token akses pengguna ditentukan oleh parameter `scopes` permintaan dalam permintaan otentikasi, atau cakupan yang ditambahkan oleh pemicu [Lambda generasi pra](user-pool-lambda-pre-token-generation.md) token. Anda dapat memecahkan kode token akses dan memeriksa `scope` klaim untuk melihat cakupan kontrol akses yang dikandungnya. Berikut ini adalah beberapa kombinasi lingkup yang mempengaruhi data yang dikembalikan dari `userInfo` titik akhir. Cakupan Amazon Cognito yang dipesan tidak `aws.cognito.signin.user.admin` berpengaruh pada data yang dikembalikan dari titik akhir ini.Contoh cakupan dalam token akses dan pengaruhnya terhadap respons `userInfo`

**`openid`**  
Mengembalikan respons dengan semua atribut pengguna yang dapat dibaca oleh klien aplikasi.

**`openid profile`**  
Mengembalikan atribut pengguna `name``family_name`,`given_name`,`middle_name`, `nickname``preferred_username`,`profile`,`picture`,`website`,`gender`,`birthdate`,`zoneinfo`,`locale`, dan`updated_at`. Juga mengembalikan [atribut kustom](user-pool-settings-attributes.md#user-pool-settings-custom-attributes). Di klien aplikasi yang tidak memiliki akses baca ke setiap atribut, respons terhadap cakupan ini adalah semua atribut dalam spesifikasi yang dapat diakses oleh klien aplikasi Anda.

**`openid email`**  
Mengembalikan informasi profil dasar `email` dan dan `email_verified` atribut.

**`openid phone`**  
Mengembalikan informasi profil dasar `phone_number` dan dan `phone_number_verified` atribut.

## GET /oauth2/userInfo
<a name="get-userinfo"></a>

Aplikasi Anda menghasilkan permintaan ke titik akhir ini secara langsung, bukan melalui browser.

Untuk informasi selengkapnya, lihat [UserInfoEndpoint](http://openid.net/specs/openid-connect-core-1_0.html#UserInfo) dalam spesifikasi OpenID Connect (OIDC).

**Topics**
+ [GET /oauth2/userInfo](#get-userinfo)
+ [Minta parameter di header](#get-userinfo-request-header-parameters)
+ [Contoh - permintaan](#get-userinfo-positive-exchanging-authorization-code-for-userinfo-sample-request)
+ [Contoh — respon positif](#get-userinfo-response-sample)
+ [Contoh tanggapan negatif](#get-userinfo-negative)

## Minta parameter di header
<a name="get-userinfo-request-header-parameters"></a>

**`Authorization: Bearer <access_token>`**  
Lulus token akses di bidang header otorisasi.  
Wajib.

## Contoh - permintaan
<a name="get-userinfo-positive-exchanging-authorization-code-for-userinfo-sample-request"></a>

```
GET /oauth2/userInfo HTTP/1.1
Content-Type: application/x-amz-json-1.1
Authorization: Bearer eyJra12345EXAMPLE
User-Agent: [User agent]
Accept: */*
Host: auth.example.com
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
```

## Contoh — respon positif
<a name="get-userinfo-response-sample"></a>

```
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: [Integer]
Date: [Timestamp]
x-amz-cognito-request-id: [UUID]
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Server: Server
Connection: keep-alive
{
    "sub": "[UUID]",
    "email_verified": "true",
    "custom:mycustom1": "CustomValue",
    "phone_number_verified": "true",
    "phone_number": "+12065551212",
    "email": "bob@example.com",
    "username": "bob"
}
```

Untuk daftar klaim OIDC, lihat Klaim [Standar](http://openid.net/specs/openid-connect-core-1_0.html#StandardClaims). Saat ini, Amazon Cognito mengembalikan nilai untuk `email_verified` dan `phone_number_verified` sebagai string.

## Contoh tanggapan negatif
<a name="get-userinfo-negative"></a>

### Contoh - permintaan buruk
<a name="get-userinfo-negative-400"></a>

```
HTTP/1.1 400 Bad Request
WWW-Authenticate: error="invalid_request",
error_description="Bad OAuth2 request at UserInfo Endpoint"
```

**`invalid_request`**  
Permintaan tidak memiliki parameter yang diperlukan, termasuk nilai parameter yang tidak didukung, atau jika tidak, salah bentuk.

### Contoh — token buruk
<a name="get-userinfo-negative-401"></a>

```
HTTP/1.1 401 Unauthorized
WWW-Authenticate: error="invalid_token",
error_description="Access token is expired, disabled, or deleted, or the user has globally signed out."
```

**`invalid_token`**  
Token akses kedaluwarsa, dicabut, cacat, atau tidak valid.

# Titik akhir pencabutan token
<a name="revocation-endpoint"></a>

Pengguna yang memegang token penyegaran di sesi mereka memiliki sesuatu yang mirip dengan cookie browser. Mereka dapat memperbarui sesi yang ada selama token penyegaran valid. Alih-alih meminta pengguna untuk masuk setelah ID atau token akses mereka kedaluwarsa, aplikasi Anda dapat menggunakan token penyegaran untuk mendapatkan token baru yang valid. Namun, Anda mungkin secara eksternal menentukan bahwa sesi pengguna harus diakhiri, atau pengguna mungkin memilih untuk melupakan sesi mereka saat ini. Pada saat itu, Anda dapat mencabut token penyegaran itu sehingga mereka tidak dapat lagi mempertahankan sesi mereka.

`/oauth2/revoke`Titik akhir mencabut token akses pengguna yang awalnya dikeluarkan Amazon Cognito dengan token penyegaran yang Anda berikan. Titik akhir ini juga mencabut token penyegaran itu sendiri dan semua token akses dan identitas berikutnya dari token penyegaran yang sama. Setelah titik akhir mencabut token, Anda tidak dapat menggunakan token akses yang dicabut untuk mengakses token Amazon APIs Cognito yang diautentikasi.

## POST /oauth2/mencabut
<a name="post-revoke"></a>

Titik akhir `/oauth2/revoke` hanya mendukung `HTTPS POST`. Klien kolam pengguna membuat permintaan ke titik akhir ini secara langsung dan tidak melalui peramban sistem.

### Minta parameter di header
<a name="revocation-request-parameters"></a>

**`Authorization`**  
Jika klien aplikasi Anda memiliki rahasia klien, aplikasi harus meneruskannya `client_id` dan `client_secret` di header otorisasi melalui otorisasi HTTP Dasar. Rahasianya adalah [Dasar](https://en.wikipedia.org/wiki/Basic_access_authentication#Client_side) `Base64Encode(client_id:client_secret)`.

**`Content-Type`**  
Harus selalu `'application/x-www-form-urlencoded'`.

#### Minta parameter dalam tubuh
<a name="revocation-request-parameters-body"></a>

**`token`**  
(Wajib) Token penyegaran yang ingin dicabut klien. Permintaan tersebut juga mencabut semua token akses yang dikeluarkan Amazon Cognito dengan token penyegaran ini.  
Wajib.

**`client_id`**  
(Opsional) ID klien aplikasi untuk token yang ingin Anda cabut.  
Diperlukan jika klien bersifat publik dan tidak memiliki rahasia.

## Contoh permintaan pencabutan
<a name="revoke-sample-request"></a>

Permintaan pencabutan ini mencabut token penyegaran untuk klien aplikasi yang tidak memiliki rahasia klien. Perhatikan `client_id` parameter di badan permintaan.

```
POST /oauth2/revoke HTTP/1.1
Host: mydomain.auth.us-east-1.amazoncognito.com
Accept: application/json
Content-Type: application/x-www-form-urlencoded
token=2YotnFZFEjr1zCsicMWpAA&
client_id=1example23456789
```

Permintaan pencabutan ini mencabut token penyegaran untuk klien aplikasi yang *memiliki* rahasia klien. Perhatikan `Authorization` header yang berisi ID klien dan rahasia klien yang dikodekan, tetapi tidak ada `client_id` di badan permintaan.

```
POST /oauth2/revoke HTTP/1.1
Host: mydomain.auth.us-east-1.amazoncognito.com
Accept: application/json
Content-Type: application/x-www-form-urlencoded
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
token=2YotnFZFEjr1zCsicMWpAA
```

## Respons kesalahan pencabutan
<a name="revoke-sample-response"></a>

Respons yang berhasil berisi tubuh kosong. Respons kesalahan adalah objek JSON dengan `error` bidang dan, dalam beberapa kasus, `error_description` bidang.

**Kesalahan titik akhir**
+ Jika token tidak ada dalam permintaan atau jika fitur dinonaktifkan untuk klien aplikasi, Anda menerima HTTP 400 dan kesalahan`invalid_request`.
+ Jika token yang dikirim Amazon Cognito dalam permintaan pencabutan bukan token penyegaran, Anda menerima HTTP 400 dan kesalahan. `unsupported_token_type`
+ Jika kredensi klien tidak valid, Anda menerima HTTP 401 dan kesalahan. `invalid_client`
+ Jika token telah dicabut atau jika klien mengirimkan token yang tidak valid, Anda menerima HTTP 200 OK. 

# Titik akhir pernyataan IDP SAMP
<a name="saml2-idpresponse-endpoint"></a>

Mereka `/saml2/idpresponse` menerima pernyataan SAMP. Dalam proses masuk service-provider-initiated (yang dimulai SP), aplikasi Anda tidak berinteraksi langsung dengan titik akhir ini—penyedia identitas SAMP 2.0 (iDP) mengalihkan pengguna Anda ke sini dengan respons SAMP mereka. Untuk login yang dimulai SP, konfigurasikan IDP Anda dengan jalur ke URL layanan konsumen pernyataan (`saml2/idpresponse`ACS) Anda. Untuk informasi selengkapnya tentang inisiasi sesi, lihat[Inisiasi sesi SAMP di kumpulan pengguna Amazon Cognito](cognito-user-pools-SAML-session-initiation.md).

Dalam proses masuk yang dimulai IDP, panggil permintaan ke titik akhir ini di aplikasi Anda setelah Anda masuk pengguna dengan penyedia SAMP 2.0 Anda. Pengguna Anda masuk dengan IDP Anda di browser mereka, lalu aplikasi Anda mengumpulkan pernyataan SAMP dan mengirimkannya ke titik akhir ini. Anda harus mengirimkan pernyataan SAMP di badan `HTTP POST` permintaan melalui HTTPS. Isi `POST` permintaan Anda harus berupa `SAMLResponse` parameter dan `Relaystate` parameter. Untuk informasi selengkapnya, lihat [Menerapkan login SAMP yang diprakarsai IDP](cognito-user-pools-SAML-session-initiation.md#cognito-user-pools-SAML-session-initiation-idp-initiation).

`saml2/idpresponse`Titik akhir dapat menerima pernyataan SAMP hingga 100.000 karakter panjangnya.

## POSTING `/saml2/idpresponse`
<a name="saml2-idpresponse-endpoint-post"></a>

Untuk menggunakan `/saml2/idpresponse` titik akhir dalam login yang dimulai IDP, buat permintaan POST dengan parameter yang menyediakan kumpulan pengguna Anda dengan informasi tentang sesi pengguna Anda.
+ Klien aplikasi yang ingin mereka masuki.
+ URL callback yang mereka inginkan berakhir di.
+ Cakupan OAuth 2.0 yang ingin mereka minta di token akses pengguna Anda.
+ IdP yang memulai permintaan masuk.

### Parameter badan permintaan yang diprakarsai IDP
<a name="saml2-idpresponse-endpoint-post-request"></a>

*SAMLResponse*  
Pernyataan SAMP yang dienkode Base64 dari IDP yang terkait dengan klien aplikasi yang valid dan konfigurasi IDP di kumpulan pengguna Anda.

*RelayState*  
`RelayState`Parameter berisi parameter permintaan yang seharusnya Anda lewatkan ke `oauth2/authorize` titik akhir. Untuk informasi mendetail tentang parameter ini, lihat [Otorisasi titik akhir](authorization-endpoint.md).    
*response\$1type*  
Jenis hibah OAuth 2.0.  
*client\$1id*  
ID klien aplikasi.  
*redirect\$1uri*  
URL tempat server otentikasi mengalihkan browser setelah Amazon Cognito memberi otorisasi kepada pengguna.  
*identity\$1provider*  
Nama penyedia identitas tempat Anda ingin mengarahkan pengguna Anda.  
*idp\$1identifier*  
Pengidentifikasi penyedia identitas tempat Anda ingin mengarahkan pengguna Anda.  
*cakupan*  
Cakupan OAuth 2.0 yang Anda ingin pengguna Anda minta dari server otorisasi.

### Contoh permintaan dengan tanggapan positif
<a name="saml2-idpresponse-endpoint-post-example"></a>

**Contoh - permintaan POST**  
Permintaan berikut adalah pemberian kode otorisasi untuk pengguna dari `MySAMLIdP` IDP di klien aplikasi. `1example23456789` Pengguna mengalihkan ke kode otorisasi mereka, yang dapat ditukar `https://www.example.com` dengan token yang menyertakan token akses dengan cakupan OAuth `openid` 2.0,, dan. `email` `phone`

```
POST /saml2/idpresponse HTTP/1.1
User-Agent: USER_AGENT
Accept: */*
Host: example.auth.us-east-1.amazoncognito.com
Content-Type: application/x-www-form-urlencoded

SAMLResponse=[Base64-encoded SAML assertion]&RelayState=identity_provider%3DMySAMLIdP%26client_id%3D1example23456789%26redirect_uri%3Dhttps%3A%2F%2Fwww.example.com%26response_type%3Dcode%26scope%3Demail%2Bopenid%2Bphone
```

**Contoh - respon**  
Berikut ini adalah respons terhadap permintaan sebelumnya.

```
HTTP/1.1 302 Found
Date: Wed, 06 Dec 2023 00:15:29 GMT
Content-Length: 0
x-amz-cognito-request-id: 8aba6eb5-fb54-4bc6-9368-c3878434f0fb
Location: https://www.example.com?code=[Authorization code]
```