Validasi klien dan audiens untuk penyedia OIDC - Izin Terverifikasi Amazon

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

Validasi klien dan audiens untuk penyedia OIDC

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

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

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

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

Saat menyiapkan penyimpanan kebijakan, masukkan satu atau beberapa nilai untuk validasi Audiens yang digunakan oleh kebijakan Anda untuk memvalidasi pemirsa token.

  • Token ID — Izin Terverifikasi memvalidasi ID klien dengan memeriksa bahwa setidaknya satu anggota klien IDs dalam aud klaim cocok dengan nilai validasi audiens.

  • Token akses — Izin Terverifikasi memvalidasi audiens dengan memeriksa apakah URL dalam aud klaim cocok dengan nilai validasi audiens. Jika tidak ada aud klaim, audiens dapat divalidasi menggunakan client_id klaim cid atau. Periksa dengan penyedia identitas Anda untuk klaim dan format audiens yang benar.

Otorisasi sisi klien untuk JWTs

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

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

async function authorizeUsingJwtToken(jwtToken) { const payload = await verifier.verify(jwtToken); let principalEntity = { entityType: "PhotoFlash::User", // the application needs to fill in the relevant user type entityId: payload["sub"], // the application need to use the claim that represents the user-id }; let resourceEntity = { entityType: "PhotoFlash::Photo", //the application needs to fill in the relevant resource type entityId: "jane_photo_123.jpg", // the application needs to fill in the relevant resource id }; let action = { actionType: "PhotoFlash::Action", //the application needs to fill in the relevant action id actionId: "GetPhoto", //the application needs to fill in the relevant action type }; let entities = { entityList: [], }; entities.entityList.push(...getUserEntitiesFromToken(payload)); let policyStoreId = "PSEXAMPLEabcdefg111111"; // set your own policy store id const authResult = await client .isAuthorized({ policyStoreId: policyStoreId, principal: principalEntity, resource: resourceEntity, action: action, entities, }) .promise(); return authResult; } function getUserEntitiesFromToken(payload) { let attributes = {}; let claimsNotPassedInEntities = ['aud', 'sub', 'exp', 'jti', 'iss']; Object.entries(payload).forEach(([key, value]) => { if (claimsNotPassedInEntities.includes(key)) { return; } if (Array.isArray(value)) { var attibuteItem = []; value.forEach((item) => { attibuteItem.push({ string: item, }); }); attributes[key] = { set: attibuteItem, }; } else if (typeof value === 'string') { attributes[key] = { string: value, } } else if (typeof value === 'bigint' || typeof value ==='number') { attributes[key] = { long: value, } } else if (typeof value === 'boolean') { attributes[key] = { boolean: value, } } }); let entityItem = { attributes: attributes, identifier: { entityType: "PhotoFlash::User", entityId: payload["sub"], // the application needs to use the claim that represents the user-id } }; return [entityItem]; }

¹ Contoh kode ini menggunakan aws-jwt-verifypustaka untuk memverifikasi JWTs ditandatangani oleh IdPs OIDC-kompatibel.