翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
カスタムスコープマルチテナンシーのベストプラクティス
Amazon Cognito は、リソースサーバー のカスタム OAuth 2.0 スコープをサポートしています。カスタムスコープを持つ (M2M) 認証モデルのユーザープール machine-to-machineにアプリケーションクライアントマルチテナンシーを実装できます。スコープベースのマルチテナンシーは、アプリケーションクライアントまたはアプリケーション設定でアクセスを定義することでM2M マルチテナンシーの実装に必要な労力を削減します。
注記
現在、アクセストークンをカスタマイズして、クライアント認証情報 (M2M) 認証フローにカスタムクレームまたはスコープを追加することはできません。
次の図は、カスタムスコープのマルチテナンシーのオプションを 1 つ示しています。ユーザープール内の関連するスコープにアクセスできる専用のアプリケーションクライアントを持つ各テナントが表示されます。
カスタムスコープのマルチテナンシーを実装するタイミング
使用が機密クライアントのクライアント認証情報による M2M 認証の場合。ベストプラクティスとして、アプリケーションクライアント専用のリソースサーバーを作成します。カスタムスコープのマルチテナンシーは、リクエスト依存またはクライアント依存の にすることができます。
- リクエスト依存
-
アプリケーションロジックを実装して、テナントの要件に一致するスコープのみをリクエストします。例えば、アプリケーションクライアントは API A と API B への読み取りおよび書き込みアクセスを発行できますが、テナントアプリケーション A は API A の読み取りスコープとテナンシーを示すスコープのみをリクエストします。このモデルにより、テナント間の共有スコープのより複雑な組み合わせが可能になります。
- クライアント依存
-
認証リクエストでアプリケーションクライアントに割り当てられたすべてのスコープをリクエストします。これを行うには、
scope
リクエストのリクエストパラメータを に省略しますトークンエンドポイント。このモデルにより、アプリケーションクライアントはカスタムスコープに追加するアクセスインジケータを保存できます。
いずれの場合も、アプリケーションは、依存するデータソースの権限を示すスコープを持つアクセストークンを受け取ります。スコープは、アプリケーションに他の情報を提示することもできます。
-
テナンシーを指定する
-
ログ記録をリクエストする寄稿
-
アプリケーションがクエリを許可されているAPIsことを示す
-
アクティブなお客様の初期チェックを通知します。
労力レベル
カスタムスコープのマルチテナンシーには、アプリケーションの規模に応じてさまざまなレベルの労力が必要です。アプリケーションがアクセストークンを解析し、適切なAPIリクエストを行うことを可能にするアプリケーションロジックを考案する必要があります。
例えば、リソースサーバースコープは の形式になります[resource server identifier]/[name]
。リソースサーバー識別子がテナントスコープの承認決定に関連している可能性が低く、スコープ名を一貫して解析する必要があります。
リソースの例
次の AWS CloudFormation テンプレートは、1 つのリソースサーバーとアプリケーションクライアントを使用して、カスタムスコープのマルチテナンシー用のユーザープールを作成します。
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"