Mengintegrasikan Express dengan Izin Terverifikasi Amazon - Izin Terverifikasi Amazon

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

Mengintegrasikan Express dengan Izin Terverifikasi Amazon

Integrasi Verified Permissions Express menyediakan pendekatan berbasis middleware untuk menerapkan otorisasi dalam aplikasi Express.js Anda. Dengan integrasi ini, Anda dapat melindungi titik akhir API menggunakan kebijakan otorisasi berbutir halus tanpa mengubah penangan rute yang ada. Integrasi menangani pemeriksaan otorisasi secara otomatis dengan mencegat permintaan, mengevaluasinya terhadap kebijakan yang Anda tetapkan, dan memastikan bahwa hanya pengguna yang berwenang yang dapat mengakses sumber daya yang dilindungi.

Topik ini memandu Anda melalui pengaturan integrasi Express, mulai dari membuat toko kebijakan hingga menerapkan dan menguji middleware otorisasi. Dengan mengikuti langkah-langkah ini, Anda dapat menambahkan kontrol otorisasi yang kuat ke aplikasi Express Anda dengan sedikit perubahan kode.

Repo berikut GitHub direferensikan di seluruh topik ini:

Prasyarat

Sebelum Anda menerapkan integrasi Express, pastikan Anda memiliki:

Menyiapkan integrasi

Langkah 1: Buat toko kebijakan

Buat toko kebijakan menggunakan AWS CLI:

aws verifiedpermissions create-policy-store --validation-settings "mode=STRICT"
catatan

Simpan ID penyimpanan kebijakan yang dikembalikan dalam respons untuk digunakan pada langkah selanjutnya.

Langkah 2: Instal dependensi

Instal paket yang diperlukan di aplikasi Express Anda:

npm i --save @verifiedpermissions/authorization-clients-js npm i --save @cedar-policy/authorization-for-expressjs

Mengkonfigurasi otorisasi

Langkah 1: Buat dan unggah skema Cedar

Skema mendefinisikan model otorisasi untuk aplikasi, termasuk jenis entitas dalam aplikasi dan tindakan yang diizinkan untuk dilakukan pengguna. Kami merekomendasikan mendefinisikan namespace untuk skema Anda. Dalam contoh ini, kami menggunakan YourNamespace. Anda melampirkan skema Anda ke penyimpanan kebijakan Izin Terverifikasi, dan ketika kebijakan ditambahkan atau diubah, layanan secara otomatis memvalidasi kebijakan terhadap skema.

@cedar-policy/authorization-for-expressjsPaket ini dapat menganalisis spesifikasi OpenAPI aplikasi Anda dan menghasilkan skema Cedar. Secara khusus, objek jalur diperlukan dalam spesifikasi Anda.

Jika Anda tidak memiliki spesifikasi OpenAPI, Anda dapat mengikuti instruksi cepat express-openapi-generatorpaket untuk menghasilkan spesifikasi OpenAPI.

Buat skema dari spesifikasi OpenAPI Anda:

npx @cedar-policy/authorization-for-expressjs generate-schema --api-spec schemas/openapi.json --namespace YourNamespace --mapping-type SimpleRest

Selanjutnya, format skema Cedar untuk digunakan dengan. AWS CLI Untuk informasi selengkapnya tentang format spesifik yang diperlukan, lihatSkema toko kebijakan Izin Terverifikasi Amazon. Jika Anda memerlukan bantuan untuk memformat skema, ada skrip yang dipanggil prepare-cedar-schema.sh di repo GitHubverifiedpermissions/examples. Berikut ini adalah contoh panggilan ke skrip yang mengeluarkan skema diformat Izin Terverifikasi dalam file. v2.cedarschema.forAVP.json

./scripts/prepare-cedar-schema.sh v2.cedarschema.json v2.cedarschema.forAVP.json

Unggah skema yang diformat ke toko kebijakan Anda, ganti policy-store-id dengan ID toko kebijakan Anda:

aws verifiedpermissions put-schema \ --definition file://v2.cedarschema.forAVP.json \ --policy-store-id policy-store-id

Langkah 2: Buat kebijakan otorisasi

Jika tidak ada kebijakan yang dikonfigurasi, Cedar menolak semua permintaan otorisasi. Integrasi kerangka kerja Express membantu mem-bootstrap proses ini dengan menghasilkan contoh kebijakan berdasarkan skema yang dihasilkan sebelumnya.

Saat menggunakan integrasi ini dalam aplikasi produksi Anda, sebaiknya buat kebijakan baru menggunakan alat infrastruktur sebagai kode (iAAC). Untuk informasi selengkapnya, lihat Membuat sumber daya Izin Terverifikasi Amazon dengan AWS CloudFormation.

Hasilkan contoh kebijakan Cedar:

npx @cedar-policy/authorization-for-expressjs generate-policies --schema v2.cedarschema.json

Ini akan menghasilkan kebijakan sampel di /policies direktori. Anda kemudian dapat menyesuaikan kebijakan ini berdasarkan kasus penggunaan Anda. Misalnya:

// Defines permitted administrator user group actions permit ( principal in YourNamespace::UserGroup::"<userPoolId>|administrator", action, resource ); // Defines permitted employee user group actions permit ( principal in YourNamespace::UserGroup::"<userPoolId>|employee", action in [YourNamespace::Action::"GET /resources", YourNamespace::Action::"POST /resources", YourNamespace::Action::"GET /resources/{resourceId}", YourNamespace::Action::"PUT /resources/{resourceId}"], resource );

Format kebijakan untuk digunakan dengan AWS CLI. Untuk informasi lebih lanjut tentang format yang diperlukan, lihat create-policy dalam referensi.AWS CLI Jika Anda memerlukan bantuan untuk memformat kebijakan, ada skrip yang dipanggil convert_cedar_policies.sh di repo verifiedpermissions/examplesGitHub. Berikut ini adalah panggilan ke skrip itu:

./scripts/convert_cedar_policies.sh

Unggah kebijakan yang diformat ke Izin Terverifikasi, ganti policy_1.json dengan jalur dan nama file kebijakan Anda dan policy-store-id dengan ID penyimpanan kebijakan Anda:

aws verifiedpermissions create-policy \ --definition file://policies/json/policy_1.json \ --policy-store-id policy-store-id

Langkah 3: Hubungkan penyedia identitas

Secara default, middleware otorisasi Izin Terverifikasi membaca Token Web JSON (JWT) yang disediakan dalam header otorisasi permintaan API untuk mendapatkan informasi pengguna. Izin Terverifikasi dapat memvalidasi token selain melakukan evaluasi kebijakan otorisasi.

Buat file konfigurasi sumber identitas bernama identity-source-configuration.txt yang terlihat seperti berikut dengan file Anda userPoolArn danclientId:

{ "cognitoUserPoolConfiguration": { "userPoolArn": "arn:aws:cognito-idp:region:account:userpool/pool-id", "clientIds": ["client-id"], "groupConfiguration": { "groupEntityType": "YourNamespace::UserGroup" } } }

Buat sumber identitas dengan menjalankan AWS CLI perintah berikut, ganti policy-store-id dengan ID toko kebijakan Anda:

aws verifiedpermissions create-identity-source \ --configuration file://identity-source-configuration.txt \ --policy-store-id policy-store-id \ --principal-entity-type YourNamespace::User

Menerapkan middleware otorisasi

Perbarui aplikasi Express Anda untuk menyertakan middleware otorisasi. Dalam contoh ini kami menggunakan token identitas, tetapi Anda juga dapat menggunakan token akses. Untuk informasi lebih lanjut, lihat authorization-for-expressjsdiGitHub.

const { ExpressAuthorizationMiddleware } = require('@cedar-policy/authorization-for-expressjs'); const { AVPAuthorizationEngine } = require('@verifiedpermissions/authorization-clients'); const avpAuthorizationEngine = new AVPAuthorizationEngine({ policyStoreId: 'policy-store-id', callType: 'identityToken' }); const expressAuthorization = new ExpressAuthorizationMiddleware({ schema: { type: 'jsonString', schema: fs.readFileSync(path.join(__dirname, '../v4.cedarschema.json'), 'utf8'), }, authorizationEngine: avpAuthorizationEngine, principalConfiguration: { type: 'identityToken' }, skippedEndpoints: [], logger: { debug: (s) => console.log(s), log: (s) => console.log(s), } }); // Add the middleware to your Express application app.use(expressAuthorization.middleware);

Menguji integrasi

Anda dapat menguji implementasi otorisasi Anda dengan membuat permintaan ke titik akhir API Anda dengan token pengguna yang berbeda. Middleware otorisasi akan secara otomatis mengevaluasi setiap permintaan terhadap kebijakan yang Anda tetapkan.

Misalnya, jika Anda telah menyiapkan grup pengguna yang berbeda dengan izin yang berbeda:

  • Administrator: Akses penuh ke semua sumber daya dan fungsi manajemen

  • Karyawan: Dapat melihat, membuat, dan memperbarui sumber daya

  • Pelanggan: Hanya dapat melihat sumber daya

Anda dapat memvalidasi bahwa kebijakan izin berfungsi seperti yang diharapkan dengan masuk ke pengguna yang berbeda dan mencoba berbagai operasi. Di terminal untuk aplikasi Express, Anda dapat melihat output log yang memberikan rincian tambahan tentang keputusan otorisasi.

Pemecahan Masalah

Jika Anda mengalami kegagalan otorisasi, coba yang berikut ini:
  • Verifikasi ID toko kebijakan Anda benar

  • Pastikan sumber identitas Anda dikonfigurasi dengan benar

  • Periksa apakah kebijakan Anda telah diformat dengan benar

  • Validasi bahwa token JWT Anda valid

Langkah selanjutnya

Setelah menerapkan integrasi dasar, pertimbangkan:

  • Menerapkan pemetaan khusus untuk skenario otorisasi tertentu

  • Menyiapkan pemantauan dan pencatatan untuk keputusan otorisasi

  • Membuat kebijakan tambahan untuk peran pengguna yang berbeda