高度なワークフロー
IDプール連携
IDプール連携を使用すると、カスタムサインインコードを作成したり、独自のユーザーアイデンティティを管理したりする必要はありません。代わりに、アプリのユーザーは、Login with Amazon、Facebook、Google、またはその他のOpenID Connect(OIDC)互換のIDプロバイダ(IdP)などの、よく知られている外部IDプロバイダを使用してサインインできます。認証トークンを受け取り、そのトークンをAWS内の一時的なセキュリティ認証情報と交換して、AWSアカウント内のリソースを使用する権限を持つIAMロールにマップできます。IdPを使用することで、アプリケーションに長期的なセキュリティ認証情報を埋め込んで配布する必要がないため、AWSアカウントを安全に保つことができます。
モバイルデバイスで実行され、Amazon S3およびDynamoDBを使用してプレイヤーとスコア情報を保存するゲームなど、AWSリソースにアクセスするモバイルアプリを作成しているとします。
このようなアプリを作成する場合、AWSアクティビティへのリクエストに署名する必要があるAWSアクセスキーを使用します。ただし、ユーザーがデバイスにダウンロードするアプリに長期的なAWS認証情報を埋め込んだり配布したりしないことを強くお勧めします。これは、暗号化されたストア内であっても同様です。代わりに、IDプール連携を使用して、必要に応じて一時的なAWSセキュリティ認証情報を動的にリクエストするようにアプリを構築してください。提供された一時的な認証情報は、モバイルアプリが必要とするタスクを実行するために必要な権限のみを持つAWSロールにマップされます。
federateToIdentityPoolを使用して、AWSCognito連携アイデンティティから直接AWS認証情報を取得し、ユーザープール連携を使用しないようにすることができます。Auth.signInでログインした場合、Amplifyがバックグラウンドでこの連携を自動的に実行するため、federateToIdentityPoolを呼び出すことはできません。一般的に、Auth.federatedSignIn()を呼び出すのはOAuthフローを使用している場合だけにしてください。
他のソーシャルプロバイダからの有効なトークンを使用して、エスケープハッチAPIfederateToIdentityPoolを使用できます。
final cognitoPlugin = Amplify.Auth.getPlugin(AmplifyAuthCognito.pluginKey);const googleIdToken = 'idToken';final session = await cognitoPlugin.federateToIdentityPool( token: googleIdToken, provider: AuthProvider.google,);セッションを取得する
連携ログイン後、Auth.fetchAuthSession APIを使用してセッションを取得できます。
トークンの更新
デフォルトでは、Amplifyは連携プロバイダからのトークンを自動的に更新しません。トークンの更新ロジックを処理して、新しいトークンをfederateToIdentityPool APIに提供する必要があります。
セッションをクリアする
clearFederationToIdentityPool APIを使用して、連携セッションをクリアできます。
final cognitoPlugin = Amplify.Auth.getPlugin(AmplifyAuthCognito.pluginKey);await cognitoPlugin.clearFederationToIdentityPool();カスタムアイデンティティIDを提供する
federateToIdentityPool APIにカスタムアイデンティティIDを提供できます。これは、複数のセッション間で同じアイデンティティIDを使用したい場合に便利です。
final cognitoPlugin = Amplify.Auth.getPlugin(AmplifyAuthCognito.pluginKey);const googleIdToken = 'idToken';const identityId = 'us-west-2:b4cd4809-7ab1-42e1-b044-07dab9eaa768';final session = await cognitoPlugin.federateToIdentityPool( token: googleIdToken, provider: AuthProvider.google, options: FederateToIdentityPoolOptions( developerProvidedIdentityId: identityId, ),);