Praktik terbaik multi-tenancy lingkup kustom - Amazon Cognito

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

Praktik terbaik multi-tenancy lingkup kustom

Amazon Cognito mendukung cakupan OAuth 2.0 khusus untuk server sumber daya. Anda dapat menerapkan multi-tenancy klien aplikasi di kumpulan pengguna untuk model otorisasi machine-to-machine (M2M) dengan cakupan khusus. Multi-tenancy berbasis cakupan mengurangi upaya yang diperlukan untuk mengimplementasikan multi-tenancy M2M dengan menentukan akses di klien aplikasi atau konfigurasi aplikasi Anda.

catatan

Saat ini, Anda tidak dapat menyesuaikan token akses untuk menambahkan klaim atau cakupan khusus dalam alur otorisasi kredensial klien (M2M).

Diagram berikut menggambarkan satu opsi untuk ruang lingkup kustom multi-tenancy. Ini menunjukkan setiap penyewa dengan klien aplikasi khusus yang memiliki akses ke cakupan yang relevan di kumpulan pengguna.

Diagram yang menggambarkan aliran cakupan kustom dalam arsitektur multi-tenant.
Kapan menerapkan multi-tenancy cakupan khusus

Ketika penggunaan Anda adalah otorisasi M2M dengan kredensi klien di klien rahasia. Sebagai praktik terbaik, buat server sumber daya yang eksklusif untuk klien aplikasi. Kustom lingkup multi-tenancy dapat bergantung pada permintaan atau tergantung klien.

Bergantung pada permintaan

Terapkan logika aplikasi untuk meminta hanya cakupan yang sesuai dengan persyaratan penyewa Anda. Misalnya, klien aplikasi mungkin dapat mengeluarkan akses baca dan tulis ke API A dan API B, tetapi aplikasi penyewa A hanya meminta cakupan baca untuk API A dan cakupan yang menunjukkan penyewaan. Model ini memungkinkan kombinasi cakupan bersama yang lebih kompleks antara penyewa.

Tergantung klien

Minta semua cakupan yang ditetapkan ke klien aplikasi dalam permintaan otorisasi Anda. Untuk melakukan ini, hilangkan parameter scope permintaan dalam permintaan Anda ke file. Titik akhir token Model ini memungkinkan klien aplikasi untuk menyimpan indikator akses yang ingin Anda tambahkan ke cakupan kustom Anda.

Dalam kedua kasus tersebut, aplikasi Anda menerima token akses dengan cakupan yang menunjukkan hak istimewa mereka untuk sumber data yang mereka andalkan. Cakupan juga dapat menyajikan informasi lain ke aplikasi Anda:

  • Tentukan sewa

  • Berkontribusi untuk meminta logging

  • Tunjukkan APIs bahwa aplikasi diizinkan untuk melakukan kueri

  • Informasikan pemeriksaan awal untuk pelanggan aktif.

Tingkat usaha

Multi-tenancy ruang lingkup khusus membutuhkan berbagai tingkat upaya relatif terhadap skala aplikasi Anda. Anda harus merancang logika aplikasi yang memungkinkan aplikasi Anda mengurai token akses dan membuat permintaan yang sesuaiAPI.

Misalnya, lingkup server sumber daya datang dalam format[resource server identifier]/[name]. Pengidentifikasi server sumber daya tidak mungkin relevan dengan keputusan otorisasi dari lingkup penyewa, yang mengharuskan nama lingkup diurai secara konsisten.

Contoh sumber daya

AWS CloudFormation Template berikut membuat kumpulan pengguna untuk multi-tenancy cakupan khusus dengan satu server sumber daya dan klien aplikasi.

AWSTemplateFormatVersion: "2010-09-09" Description: A sample template illustrating scope-based multi-tenancy Resources: MyUserPool: Type: "AWS::Cognito::UserPool" MyUserPoolDomain: Type: AWS::Cognito::UserPoolDomain Properties: UserPoolId: !Ref MyUserPool # Note that the value for "Domain" must be unique across all of AWS. # In production, you may want to consider using a custom domain. # See: https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-add-custom-domain.html#cognito-user-pools-add-custom-domain-adding Domain: !Sub "example-userpool-domain-${AWS::AccountId}" MyUserPoolResourceServer: Type: "AWS::Cognito::UserPoolResourceServer" Properties: Identifier: resource1 Name: resource1 Scopes: - ScopeDescription: Read-only access ScopeName: readScope UserPoolId: !Ref MyUserPool MyUserPoolTenantBatch1ResourceServer: Type: "AWS::Cognito::UserPoolResourceServer" Properties: Identifier: TenantBatch1 Name: TenantBatch1 Scopes: - ScopeDescription: tenant1 identifier ScopeName: tenant1 - ScopeDescription: tenant2 identifier ScopeName: tenant2 UserPoolId: !Ref MyUserPool MyUserPoolClientTenant1: Type: "AWS::Cognito::UserPoolClient" Properties: AllowedOAuthFlows: - client_credentials AllowedOAuthFlowsUserPoolClient: true AllowedOAuthScopes: - !Sub "${MyUserPoolTenantBatch1ResourceServer}/tenant1" - !Sub "${MyUserPoolResourceServer}/readScope" GenerateSecret: true UserPoolId: !Ref MyUserPool Outputs: UserPoolClientId: Description: User pool client ID Value: !Ref MyUserPoolClientTenant1 UserPoolDomain: Description: User pool domain Value: !Sub "https://${MyUserPoolDomain}.auth.${AWS::Region}.amazoncognito.com"