Keluaran dari otorisasi API Gateway Lambda - Amazon API Gateway

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

Keluaran dari otorisasi API Gateway Lambda

Output fungsi otorisasi Lambda adalah objek mirip kamus, yang harus menyertakan pengidentifikasi utama (principalId) dan dokumen kebijakan () yang berisi daftar pernyataan kebijakan. policyDocument Outputnya juga dapat menyertakan context peta yang berisi pasangan kunci-nilai. Jika API menggunakan paket penggunaan (apiKeySourcedisetel keAUTHORIZER), fungsi otorisasi Lambda harus mengembalikan salah satu kunci API paket penggunaan sebagai nilai properti. usageIdentifierKey

Berikut ini menunjukkan contoh output ini.

{   "principalId": "yyyyyyyy", // The principal user identification associated with the token sent by the client. "policyDocument": { "Version": "2012-10-17", "Statement": [ { "Action": "execute-api:Invoke", "Effect": "Allow|Deny", "Resource": "arn:aws:execute-api:{regionId}:{accountId}:{apiId}/{stage}/{httpVerb}/[{resource}/[{child-resources}]]" } ] }, "context": { "stringKey": "value", "numberKey": "1", "booleanKey": "true" }, "usageIdentifierKey": "{api-key}" }

Di sini, pernyataan kebijakan menentukan apakah akan mengizinkan atau menolak (Effect) layanan eksekusi API Gateway untuk memanggil (Action) metode API yang ditentukan (Resource). Anda dapat menggunakan wild card (*) untuk menentukan jenis sumber daya (metode). Untuk informasi tentang menyetel kebijakan yang valid untuk memanggil API, lihatReferensi pernyataan kebijakan IAM untuk menjalankan API di API Gateway.

Untuk metode ARN yang diaktifkan otorisasi, misalnyaarn:aws:execute-api:{regionId}:{accountId}:{apiId}/{stage}/{httpVerb}/[{resource}/[{child-resources}]], panjang maksimum adalah 1600 byte. Nilai parameter jalur, ukuran yang ditentukan pada waktu berjalan, dapat menyebabkan panjang ARN melebihi batas. Ketika ini terjadi, klien API akan menerima 414 Request URI too long respons.

Selain itu, ARN Sumber Daya, seperti yang ditunjukkan dalam keluaran pernyataan kebijakan oleh otorisasi, saat ini dibatasi hingga 512 karakter. Untuk alasan ini, Anda tidak boleh menggunakan URI dengan token JWT dengan panjang yang signifikan dalam URI permintaan. Anda dapat dengan aman meneruskan token JWT di header permintaan, sebagai gantinya.

Anda dapat mengakses principalId nilai dalam template pemetaan menggunakan $context.authorizer.principalId variabel. Ini berguna jika Anda ingin meneruskan nilai ke backend. Untuk informasi selengkapnya, lihat $contextVariabel untuk model data, otorisasi, templat pemetaan, dan CloudWatch pencatatan akses.

Anda dapat mengaksesstringKey,numberKey, atau booleanKey nilai (misalnya,, "value""1", atau"true") context peta dalam templat pemetaan dengan memanggil$context.authorizer.stringKey,, atau $context.authorizer.numberKey$context.authorizer.booleanKey, masing-masing. Nilai yang dikembalikan semuanya dirangkai. Perhatikan bahwa Anda tidak dapat mengatur objek atau array JSON sebagai nilai yang valid dari kunci apa pun di context peta.

Anda dapat menggunakan context peta untuk mengembalikan kredensi cache dari otorisasi ke backend, menggunakan templat pemetaan permintaan integrasi. Hal ini memungkinkan backend untuk memberikan pengalaman pengguna yang lebih baik dengan menggunakan kredensi cache untuk mengurangi kebutuhan untuk mengakses kunci rahasia dan membuka token otorisasi untuk setiap permintaan.

Untuk integrasi proxy Lambda, API Gateway meneruskan context objek dari otorisasi Lambda langsung ke fungsi Lambda backend sebagai bagian dari input. event Anda dapat mengambil pasangan context kunci-nilai dalam fungsi Lambda dengan memanggil. $event.requestContext.authorizer.key

{api-key}singkatan dari kunci API dalam rencana penggunaan tahap API. Untuk informasi selengkapnya, lihat Paket penggunaan dan kunci API untuk REST API di API Gateway .

Berikut ini menunjukkan contoh output dari contoh Lambda authorizer. Output contoh berisi pernyataan kebijakan untuk memblokir (Deny) panggilan ke GET metode untuk dev tahap API (ymy8tbxw7b) dari AWS account (123456789012).

{ "principalId": "user", "policyDocument": { "Version": "2012-10-17", "Statement": [ { "Action": "execute-api:Invoke", "Effect": "Deny", "Resource": "arn:aws:execute-api:us-west-2:123456789012:ymy8tbxw7b/dev/GET/" } ] } }