2

新しいAmazonCognitoIdentityClientを初期化するこれら2つの方法の違いは何ですか?BasicAWSCredentialsとCognitoAWSCredentialsでamazon aws cognitoクライアントを初期化する

AmazonCognitoIdentity identityClient = new AmazonCognitoIdentityClient(
    new BasicAWSCredentials("access_key_id", "secret_access_key") 
); 
identityClient.GetOpenIdTokenForDeveloperIdentity() 

- 両方BasicAWSCredentialsなどCognitoAWSCredentialsある - インターネットのショーBasicAWSCredentials上のほとんどの例はCognitoIdentityClientをインスタンス化するために使用されているが、docにメソッドのシグネチャは、それがAWSCredentialsクラスが受け入れると言いますが

AmazonCognitoIdentity identityClient = new AmazonCognitoIdentityClient(
    new CognitoAWSCredentials ("IDENTITY_POOL_ID", "REGION_NAME"); 
); 
identityClient.GetOpenIdTokenForDeveloperIdentity() 

AWSCredentialsクラスのサブクラスです。したがって、私は両方が正常に動作しているはずだと思っていますか? 、

  • 権限、
  • タイムアウト
  • など:

    私は、次のこの差は、影響を与えるかを理解しようとしていますか? cognitoIdentityClientコンストラクタのための

APIリファレンスはここにある:あなたがCognitoAWSCredentialsを使用してAmazonCognitoIdentityClientクライアントをインスタンス化するクライアントデバイスでhttp://docs.aws.amazon.com/sdkfornet/v3/apidocs/index.html?page=CognitoIdentity/TCognitoIdentityCognitoIdentityClient.html&tocid=Amazon_CognitoIdentity_AmazonCognitoIdentityClient

答えて

2

。 STSサービスを使用すると、AWSクライアントは、クライアントがIDプールで以前に定義した役割を引き受けるための一時的な資格情報を取得します。通常、このロールはAWSリソースへのアクセスが非常に限られています。 (S3を特定のバケットなどにアップロードする)これは、エンジンではなく音楽システムのみをオンにすることができる特別なタイプの車キーを人々に与えるようなものです。

一方、GetOpenIdTokenForDeveloperIdentityは、開発者の資格情報を必要とする特殊なAPI呼び出しです。デベロッパーの資格情報は、決してクライアントデバイスには配布しないでください。サーバー上にのみ保管してください。サーバーでデベロッパー資格情報を使用してAmazonCognitoIdentityClientをインスタンス化すると、(特定のID IDまたは新しいIDを作成するための)OpenIdトークンを取得するためのクライアント用のRESTエンドポイントが公開されます。ユーザーがユーザー名とパスワードを使用してAPIにログインし、データベースに格納されているカスタムアクセストークンを返すとします。

  1. は使用LookupDeveloperIdentity
  2. カスタムトークン(など、ユーザーID、ユーザー名、電子メール)を使用して、ユーザーの一意の識別子を取得し、指定されたユーザー名のためidentityIdを見つける:あなたのエンドポイントは、このロジックを実装することができることをした後、 。
  3. GetOpenIdTokenForDeveloperIdentityとfoundIdIdを使用して、クライアントに送り返します。だから彼らはそのアイデンティティIDに「ログイン」することができます。
  4. このユーザーにユーザー名にIDが割り当てられていない場合は、新しいユーザーIDを作成して返信します。

開発者のAWSトークンは、2つの機密API呼び出しを有効にしています。クライアントが開発者アクセストークンを持っていて、したがってGetOpenIdTokenForDeveloperIdentityコールにアクセスできると仮定します。そうすれば、OpenIdトークンを生成し、他人のアイデンティティに簡単に切り替えたり、プライベートデータにアクセスしたりすることができます。

開発者認証ID(https://docs.aws.amazon.com/cognito/latest/developerguide/developer-authenticated-identities.html)を使用しない場合は、GetOpenIdTokenForDeveloperIdentityメカニズムは必要ありません。公開認証方法(Twitter、Facebookなど)のみを使用している場合)2番目の段落を無視し、CognitoAWSCredentialsを使用する必要があります。

+0

この行についてはっきりさせてください。 *** "このエンドポイントはカスタムアイデンティティトークンを受け入れ、有効性をチェックして、OpenIdトークンをクライアントに送り返します。" ***あなたは、RESTエンドポイントがカスタムIdentityTokenまたはカスタムIdentityIDを受け入れることを意味しましたか?このシナリオでは、OpenIDTokenまたはIdentityIDを持っています。どちらがRESTエンドポイントへの入力であるはずですか? –

+1

私は自分の答えを編集しました。私はこのコグニートが本当の頭痛であるので、私は説明することができますどのくらいいいかわからない。私たちにとっても、それは非常に複雑で、理解するのに時間がかかりました。それは簡単なサービスではありません。 –

+0

編集をありがとう。はいコグニートはかなりトリッキーです。あなたがそれについて知っているかもしれない場合に備えて別の質問をしてください。 'GetOpenIdTokenForDeveloperIdentity'はIdentityIdとOpenIDTokenを返します。とにかくOpenIDTokenはどこで使用されていますか?連合認証の認証フローでは、次の呼び出しはGetCredentialsForIdentity()となります(http://docs.aws.amazon.com/cognitoidentity/latest/APIReference/API_GetCredentialsForIdentity.htmlのドキュメントによると、「IdentityId」のみが必要です) - 'GetOpenIdTokenForDeveloperIdentity'によって返される' OpenIdToken'は必要ありません。何が必要なの? –

0

Çaatayさんの回答に記載されているように、BasicAwsCredentialsは開発者の資格情報でインスタンス化されています。彼が各コンストラクタをいつ使用するかについて記述したことは、開発者が認証したアイデンティティー以外のすべてのケースで絶対に正しいです。

このコードはバックエンドサービスにデプロイされるため、露出はそれほど問題になりません。モバイルクライアントはこのサーバーと通信し、そこからトークンを取得し、資格情報を取得します。このパターンでは、資格情報がユーザーに公開されることはありません。

Cognito documentationにあるように、サンプルにはBasicAwsCredentialsがあります。エンドツーエンドのサンプルはthis blog postに表示されます。

関連する問題