認証されていないユーザーから認証されたユーザー (ID プール) への切り替え - Amazon Cognito

認証されていないユーザーから認証されたユーザー (ID プール) への切り替え

Amazon Cognito ID プールは、認証されたユーザーと認証されていないユーザーの両方をサポートします。認証されていないユーザーは、ID プロバイダー (IdP) を使用してログインしていない場合でも、AWS リソースへのアクセス権を受け取ります。このレベルのアクセスは、ユーザーがログインする前にユーザーにコンテンツを表示する場合に便利です。認証されていない各ユーザーは、個別にログインして認証していない場合でも、ID プールに一意の ID があります。

このセクションでは、ユーザーがログインに使用する ID を、認証されていない ID から認証された ID に切り替える方法について説明します。

Android

ユーザーは、認証されていないゲストとしてアプリケーションにログインできます。最終的に、ユーザーはサポートされている IdP のいずれかを使用してログインすることを決定する可能性があります。Amazon Cognito は、古いアイデンティティが新しいアイデンティティと同じ識別子を維持し、プロファイルデータが自動的にマージされることを確実にします。

アプリケーションに、プロファイルの結合が IdentityChangedListener インターフェイスを通じて通知されます。インターフェイスで identityChanged メソッドを実装して、これらのメッセージを受け取ります。

@override public void identityChanged(String oldIdentityId, String newIdentityId) { // handle the change }

iOS - Objective-C

ユーザーは、認証されていないゲストとしてアプリケーションにログインできます。最終的に、ユーザーはサポートされている IdP のいずれかを使用してログインすることを決定する可能性があります。Amazon Cognito は、古いアイデンティティが新しいアイデンティティと同じ識別子を維持し、プロファイルデータが自動的にマージされることを確実にします。

NSNotificationCenter はプロファイルの結合をアプリケーションに通知します。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(identityIdDidChange:) name:AWSCognitoIdentityIdChangedNotification object:nil]; -(void)identityDidChange:(NSNotification*)notification { NSDictionary *userInfo = notification.userInfo; NSLog(@"identity changed from %@ to %@", [userInfo objectForKey:AWSCognitoNotificationPreviousId], [userInfo objectForKey:AWSCognitoNotificationNewId]); }

iOS - Swift

ユーザーは、認証されていないゲストとしてアプリケーションにログインできます。最終的に、ユーザーはサポートされている IdP のいずれかを使用してログインすることを決定する可能性があります。Amazon Cognito は、古いアイデンティティが新しいアイデンティティと同じ識別子を維持し、プロファイルデータが自動的にマージされることを確実にします。

NSNotificationCenter はプロファイルの結合をアプリケーションに通知します。

[NSNotificationCenter.defaultCenter().addObserver(observer: self selector:"identityDidChange" name:AWSCognitoIdentityIdChangedNotification object:nil) func identityDidChange(notification: NSNotification!) { if let userInfo = notification.userInfo as? [String: AnyObject] { print("identity changed from: \(userInfo[AWSCognitoNotificationPreviousId]) to: \(userInfo[AWSCognitoNotificationNewId])") } }

JavaScript

認証されていないユーザーとしての開始

通常、ユーザーは認証されていないロールから開始します。このロールでは、Logins プロパティを使用しないで設定オブジェクトの認証情報プロパティを設定します。この場合、デフォルト設定は次のようになります。

// set the default config object var creds = new AWS.CognitoIdentityCredentials({ IdentityPoolId: 'us-east-1:1699ebc0-7900-4099-b910-2df94f52a030' }); AWS.config.credentials = creds;

認証されたユーザーへの切り替え

認証されていないユーザーが IdP にログインしたときに、トークンがあれば、カスタム関数を呼び出して認証情報オブジェクトを更新し Logins トークンを追加することで、認証されていないユーザーを認証されたユーザーに切り替えることができます。

// Called when an identity provider has a token for a logged in user function userLoggedIn(providerName, token) { creds.params.Logins = creds.params.Logins || {}; creds.params.Logins[providerName] = token; // Expire credentials to refresh them on the next request creds.expired = true; }

また、CognitoIdentityCredentials オブジェクトを作成することもできます。作成する場合は、既存のサービスオブジェクトの認証情報プロパティをリセットして、更新された認証情報の設定内容を反映する必要があります。「グローバル設定オブジェクトの使用」を参照してください。

CognitoIdentityCredentials オブジェクトの詳細については、AWS SDK for JavaScript API リファレンスの「AWS.CognitoIdentityCredentials」を参照してください。

Unity

ユーザーは、認証されていないゲストとしてアプリケーションにログインできます。最終的に、ユーザーはサポートされている IdP のいずれかを使用してログインすることを決定する可能性があります。Amazon Cognito は、古いアイデンティティが新しいアイデンティティと同じ識別子を維持し、プロファイルデータが自動的にマージされることを確実にします。

プロファイルの結合の通知を受け取るには、IdentityChangedEvent にサブスクライブできます。

credentialsProvider.IdentityChangedEvent += delegate(object sender, CognitoAWSCredentials.IdentityChangedArgs e) { // handle the change Debug.log("Identity changed from " + e.OldIdentityId + " to " + e.NewIdentityId); };

Xamarin

ユーザーは、認証されていないゲストとしてアプリケーションにログインできます。最終的に、ユーザーはサポートされている IdP のいずれかを使用してログインすることを決定する可能性があります。Amazon Cognito は、古い ID の一意の識別子を新しい ID に継承して、プロファイルデータが自動的に結合されるようにします。

credentialsProvider.IdentityChangedEvent += delegate(object sender, CognitoAWSCredentials.IdentityChangedArgs e){ // handle the change Console.WriteLine("Identity changed from " + e.OldIdentityId + " to " + e.NewIdentityId); };