高度なワークフロー
イベントの購読
ユーザーがサインインまたはサインアウトするときに特定のアクションを実行するには、アプリで認証イベントを購読します。詳細については、Hub Module開発者ガイドを参照してください。
IDプール連携
モバイルデバイスで実行され、Amazon S3およびDynamoDBを使用してプレイヤーとスコア情報を保存するゲームなど、AWSリソースにアクセスするモバイルアプリを作成しているとします。
このようなアプリを作成する場合、AWSサービスへのリクエストに署名する必要があるAWSアクセスキーを使用します。ただし、ユーザーがデバイスにダウンロードするアプリに長期的なAWS認証情報を埋め込んだり配布したりしないことを強くお勧めします。これは、暗号化されたストア内であっても同様です。代わりに、Webアイデンティティ連携を使用して、必要に応じて一時的なAWSセキュリティ認証情報を動的にリクエストするようにアプリを構築してください。提供された一時的な認証情報は、モバイルアプリが必要とするタスクを実行するために必要な権限のみを持つAWSロールにマップされます。
Webアイデンティティ連携を使用すると、カスタムサインインコードを作成したり、独自のユーザーアイデンティティを管理したりする必要はありません。代わりに、アプリのユーザーは、Login with Amazon、Facebook、Google、またはその他のOpenID Connect(OIDC)互換のIDプロバイダ(IdP)などの、よく知られている外部IDプロバイダを使用してサインインできます。認証トークンを受け取り、そのトークンをAWS内の一時的なセキュリティ認証情報と交換して、AWSアカウント内のリソースを使用する権限を持つIAMロールにマップできます。IdPを使用することで、アプリケーションに長期的なセキュリティ認証情報を埋め込んで配布する必要がないため、AWSアカウントを安全に保つことができます。
federateToIdentityPoolを使用して、AWSCognito連携アイデンティティから直接AWS認証情報を取得し、ユーザープール連携を使用しないようにすることができます。Auth.signInでログインした場合、Amplifyがバックグラウンドでこの連携を自動的に実行するため、federateToIdentityPoolを呼び出すことはできません。一般的に、Auth.federatedSignIn()を呼び出すのはOAuthフローを使用している場合だけにしてください。
他のソーシャルプロバイダからの有効なトークンを使用して、エスケープハッチAPIfederateToIdentityPoolを使用できます。
if (Amplify.Auth.getPlugin("awsCognitoAuthPlugin") instanceof AWSCognitoAuthPlugin) { AWSCognitoAuthPlugin plugin = (AWSCognitoAuthPlugin) Amplify.Auth.getPlugin("awsCognitoAuthPlugin"); plugin.federateToIdentityPool( "YOUR_TOKEN", AuthProvider.facebook(), result -> { Log.i("AuthQuickstart", "Successful federation to Identity Pool."); // use result.getCredentials() }, e -> { Log.e("AuthQuickstart", "Failed to federate to Identity Pool.", e) } );}(Amplify.Auth.getPlugin("awsCognitoAuthPlugin") as? AWSCognitoAuthPlugin)?.let { plugin -> plugin.federateToIdentityPool( "YOUR_TOKEN", AuthProvider.facebook(), { Log.i("AuthQuickstart", "Successful federation to Identity Pool.") // use "it.credentials" }, { Log.e("AuthQuickstart", "Failed to federate to Identity Pool.", it) } )}セッションを取得する
連携ログイン後、Auth.fetchAuthSession APIを使用してセッションを取得できます。
トークンの更新
デフォルトでは、Amplifyは連携プロバイダからのトークンを自動的に更新しません。トークンの更新ロジックを処理して、新しいトークンをfederateToIdentityPool APIに提供する必要があります。
セッションをクリアする
clearFederationToIdentityPool APIを使用して、連携セッションをクリアできます。
if (Amplify.Auth.getPlugin("awsCognitoAuthPlugin") instanceof AWSCognitoAuthPlugin) { AWSCognitoAuthPlugin plugin = (AWSCognitoAuthPlugin) Amplify.Auth.getPlugin("awsCognitoAuthPlugin"); plugin.clearFederationToIdentityPool( () -> Log.i("AuthQuickstart", "Federation cleared successfully."), e -> Log.e("AuthQuickstart", "Failed to clear federation.", e) );}(Amplify.Auth.getPlugin("awsCognitoAuthPlugin") as? AWSCognitoAuthPlugin)?.let { plugin -> plugin.clearFederationToIdentityPool( { Log.i("AuthQuickstart", "Federation cleared successfully.") }, { Log.e("AuthQuickstart", "Failed to clear federation.", it) } )}カスタムアイデンティティIDを提供する
federateToIdentityPool APIにカスタムアイデンティティIDを提供できます。これは、複数のデバイス間で同じアイデンティティIDを使用したい場合に便利です。
FederateToIdentityPoolOptions options = FederateToIdentityPoolOptions.builder() .developerProvidedIdentityId("YOUR_CUSTOM_IDENTITY_ID") .build();
if (Amplify.Auth.getPlugin("awsCognitoAuthPlugin") instanceof AWSCognitoAuthPlugin) { AWSCognitoAuthPlugin plugin = (AWSCognitoAuthPlugin) Amplify.Auth.getPlugin("awsCognitoAuthPlugin"); plugin.federateToIdentityPool( "YOUR_TOKEN", AuthProvider.facebook(), options, result -> { Log.i("AuthQuickstart", "Successful federation to Identity Pool."); // use result.getCredentials() }, e -> { Log.e("AuthQuickstart", "Failed to federate to Identity Pool.", e) } );}val options = FederateToIdentityPoolOptions.builder() .developerProvidedIdentityId("YOUR_CUSTOM_IDENTITY_ID") .build()
(Amplify.Auth.getPlugin("awsCognitoAuthPlugin") as? AWSCognitoAuthPlugin)?.let { plugin -> plugin.federateToIdentityPool( "YOUR_TOKEN", AuthProvider.facebook(), options, { Log.i("AuthQuickstart", "Successful federation to Identity Pool.") // use "it.credentials" }, { Log.e("AuthQuickstart", "Failed to federate to Identity Pool.", it) } )}