2016-10-18 15 views
2

はここ はCognito連合アイデンティティプールでCognitoユーザープールを統合する方法

  • ユーザーがゲストアカウントにプロファイルデータを保存

    1. ユーザーが自動的に与えられている我々のアプリで匿名、ゲストアカウントをユーザーアカウントを実装するための私達のシナリオです
    2. 他のデバイスからゲストアカウントにアクセスするには、登録してゲストアカウントを登録ユーザーアカウントに変換する必要があります。
    3. ユーザーが別のデバイスからサインインし、登録ユーザーアカウントにアクセスし、 accがある以前に保存されたプロファイルデータと比較することができます。

    ステップ#3および#4を強制的に実行するわけではありません。デバイスを切り替えたり、デバイスを工場出荷時にリセットしたりする必要がないかぎり、ゲストアカウントにアクセスできなくなります。

    アマゾンモバイルSDKの2.3.x以降とCognito連携アイデンティティプールを使用して、我々のような上記の手順を実装するには:

    1. プロファイルを保存するためにCognito連携アイデンティティプールに
    2. 使用Cognitoデータ同期を使用して認証されていないIDを作成します。データ
    3. Facebookのログイン情報を認証されていないIDとリンクさせて登録IDに変換するには
    4. 他のデバイスからFacebookを使用してサインインすると、登録されたID以前のデバイスから削除します。ユーザーはCognito Data Syncに保存されている以前のプロフィールデータにアクセスできます。

    これらの手順を実行するには、Cognito User Poolの導入前にAWS Mobile Hubで生成されたサンプルコードを使用しました。これは、AWSIdentityManagerとAWSFacebookSignInProviderの組み合わせとそのサポートコードを使用していました。すべてが期待どおりに機能しました。上記のように

  • 同上

    1. 同じ:私たちは今、最新のアマゾンモバイルSDK 2.4.9に変換し、同じフローを実装するために、代わりにFacebookのログインのCognitoユーザーのプールを使用しようとしている

    2. ユーザは、Cognito User Poolを使用してサインアップしてUser Poolアイデンティティを作成します。ユーザー名/パスワードでサインインします。
    3. ユーザーは、別のデバイスのユーザー名/パスワードを使用してサインインし、登録されたユーザープールIDに切り替えます。これで、ユーザーはCognito Data Syncに保存されたプロファイルデータにアクセスできるようになります。

    手順#1 &#2は、AWSMobileHubHelper.frameworkのAWSIdentityManagerを使用して実装されています。ステップ#3 &#4は、CognitoYourUserPoolsSampleサンプルプロジェクトのサンプルコードで実装されています。私たちが抱えている

    問題は、以下のとおりです。ステップ#3では

    1. 、サインアップすると、ユーザーのプールコンソールのCognitoユーザープールIDを作成します。しかし、その登録済みユーザーでサインインしても、ユーザープールIDからIDプールIDへのログインはリンクされません。
      • 以前の実装では、アイデンティティ・プロバイダ「graph.facebook.com」がアイデンティティ・プール・コンソールにリンク・ログインとしてリストされていました。 Integrating User Pools with Amazon Cognito Identityで説明されているように、アイデンティティプロバイダ "cognito-idp.us-east-1.amazonaws.com/us-east-1_123456789"に類似したものが存在するはずです。
    2. 登録されたユーザープールIDのユーザー名/パスワードを使用してサインインした後、IDプールIDは以前のデバイスの登録済みIDに決して切り替わりません。 (おそらく上の問題のために)。したがって、以前に保存されたプロファイルデータにアクセスすることはできません。
      • Facebookの実装では、以前のサンプルコードでこれを行い、Switching Identitiesに記載されているようにアプリに通知しました。ユーザープールの実装では、通知は決して行われません。

    私はここに欠けている非常に重要なステップがあります。 Cognito User PoolのログインにCognito Identity Poolの識別情報を明示的にリンクしていないと思われます。 CognitoYourUserPoolsSampleには、ユーザープールのIDとフェデレーションIDプールを統合する方法の例は記載されていません。単純にこれを行うと、それは自動だと

    ドキュメントは言うが、私はそれが仕事を得ることができませんでした:

    AWSCognitoIdentityUserPool *pool = [AWSCognitoIdentityUserPool CognitoIdentityUserPoolForKey:@"UserPool"]; 
        AWSCognitoCredentialsProvider *credentialsProvider = [[AWSCognitoCredentialsProvider alloc] 
                      initWithRegionType:AWSRegionUSEast1 
                      identityPoolId:@“<identity-pool-id>" 
                      identityProviderManager:pool]; 
    
        AWSServiceConfiguration *configuration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSEast1 credentialsProvider:credentialsProvider]; 
        AWSServiceManager.defaultServiceManager.defaultServiceConfiguration = configuration; 
    

    誰でもプロセスを示し任意のアイデアやサンプルコードがありますか?私が見つけることができる最も近いサンプルコードはfork of CognitoSyncDemoであり、それはまだ私が必要としていたものではありませんでした。

  • 答えて

    6

    IDのマージは、資格プロバイダによってサポートされていますが、AWSIdentityManager(モバイルハブヘルパーの一部)ではサポートされていません。私はモバイルハブヘルパーの修正版を持っています(https://github.com/BruceBuckland/aws-mobilehub-helper-iosのモバイルハブヘルパーギブスのフォークです)。そのフォークは、いくつかのことをサポートするようにAWSIdentityManagerを変更します。1)新しいAWSSignInProviders(モバイルハブヘルパープロトコル)を作成し、それらを使用してセッションを再開することをサポートします。 2) "Merged Identities"を許可し、アイデンティティをマージする。 3)どのプロバイダが現在認証をしているのか、リンクされているものをユーザに示し、どのプロバイダがログインを拒否したのかを示すのに便利なプロバイダのフレンドリ名を見つけるヘルパーメソッドがいくつかあります。

    また、Cognito User PoolsのAWSSignInProviderの実装を含むサンプルアプリケーションもあります。 3つのプロバイダ(UserPools FaceBookとGoogle)のサインインサインアウトとアカウントリンクを示しています。サインアップ、サインイン、パスワードの忘れ、属性の更新、それらの確認など、ユーザープールのいくつかの機能を実装しています。それはhttps://github.com/BruceBuckland/SignIn-awsmhhにあります。

    最後に、サンプルアプリケーションのノートのpdfをご覧ください。それらは、コンポーネントの相互作用をよりよく理解するのに役立ちます。私はコグニートを理解するのに長い時間がかかり、他の人のためのシステムを明確にしようと私のノートをまとめました。彼らはここにいます:Cognito Notes and Diagram

    +0

    ありがとうございました。このソリューション(あなたのモバイルハブヘルパーのフォーク)は私たちの問題を解決します。あなたの "Cognito Notes and Diagram" PDFで、Cognitoの非常に徹底的かつ簡潔な要約のための特別な名誉です。 – cyanware

    関連する問題