公式のSDKがないプラットフォームで、Amazon Cognito REST API(ユーザープール用)を介して)ログインを実行するにはどうすればよいですか? ?-IDプールではなく、ユーザープールを要求していることに注意してください。
Amazon cognitoは3種類のログインを提供します。
2つ目を使用しています(ユーザープールあり)
Amazon cognitoには、Android、iOS、javascript、XamarinなどのSDKがいくつかあります。CognitoはREST公式SDKでサポートされているもの以外のプラットフォームでビルドするためのAPIも提供しています。私は別のプラットフォーム用のアプリを構築しています、したがって、REST APIは私の唯一の方法です私のプラットフォーム用の公式SDKはありません。
Cognito REST APIは、「sign up」、「forgot password」のさまざまなエンドポイントを提供します、「確認の確認」などですが、意外なことに、the REST API単純なサインイン/ログインのエンドポイントがありません。
から Cognito CLI API docs 「signup users」、「signups "、"パスワードを変更 "、"電話番号を確認 "、"パスワードを忘れた "など驚いたことに、ログイン用のCLI APIはありません。私は「$ aws cognito-idp log-in
"と同じように"$ aws cognito-idp sign-up
"または"$ aws cognito-idp forgot-password
"など。
また、 この入門チュートリアル から、「*受け取ったトークンで何をすべきか[〜#〜] after [〜# 〜]ユーザーの認証に成功しました* "。ただし、それはHOW TOについては話していません。 CognitoユーザープールAPI。サンプルは、Android、iOS、JavaScript SDKでのみ使用できます。 SDKがないプラットフォームで利用できる認証の例はありません。
したがって、が存在しないプラットフォームで、Amazon Cognito REST APIs(ユーザープール用))を介してログインを実行するにはどうすればよいですか?公式SDK?
更新:
以下のコメントで指摘したように、認証フローはここに文書化されています: http://docs.aws.Amazon.com/cognito/latest/developerguide/Amazon-cognito-user-pools-authentication-flow。 html 。これは、認証フローを明確にするのに役立ちます
多少直感に反しますが、ユーザーに明示的にサインインさせたくないが、代わりにユーザーのためにトークンを持ち歩かせたいモバイルアプリには意味があります。 iOSのAWS Userpools SDKには明示的なサインイン(ログイン)APIがあることに注意してください。私はそれを使用していませんが、同じInitiateAuth()
に続いてRespondToAuthChallenge()
フローを実行するための代替のクライアント側APIであると思います。 iOSサインインの例はここに記載されています- IOS SDKの例:ユーザーのサインイン
元の投稿:
認証を開始するためのCognitoユーザープールAPIドキュメントは こちらから入手可能
SDKのいずれかにユーザープールアプリケーションを実装すると、動作がより明確になります(iOSの場合はSwiftで実装しましたが、JSON応答のログが詳細であり、ログを見れば、何が起こっているのかがわかるでしょう)。
しかし、私があなたの質問を理解していると仮定します:要約すると、InitiateAuth()
であり、それに対する(Cognitoユーザープールサーバーからの)応答は困難です。次に、RespondToAuthChallenge()
を実行し(これもAPIドキュメントに記載されています)、その応答は認証結果です-パスワード/セッション/トークンが受け入れられたと想定しています。
これら2つのことの組み合わせは、あなたがLOGINと呼んでいるものであり、ログインのように機能します。 APIでは、ユーザーが認証されていないときにユーザー情報を取得しようとすると、そのInitiateAuth()
が開始され、APIは(とにかくiOSでは)作成したコードにコールバックを実行して要求します。パスワードの場合、RespondToAuthChallenge()
リクエストなどを送信します。
このcurlコマンドは私にとってはうまくいきます:
curl -X POST --data @aws-auth-data.json \
-H 'X-Amz-Target: AWSCognitoIdentityProviderService.InitiateAuth' \
-H 'Content-Type: application/x-amz-json-1.1' \
https://cognito-idp.us-east-1.amazonaws.com/
Aws-auth-data.jsonは次のとおりです。
{
"AuthParameters" : {
"USERNAME" : "[email protected]",
"PASSWORD" : "yourpassword"
},
"AuthFlow" : "USER_PASSWORD_AUTH",
"ClientId" : "75........................"
}
ユーザープールクライアントは、これが機能するためにUSER_PASSWORD_AUTHを許可する必要があります。これはAWS側の設定です。
AWS Cognitoチームの開発者の1人がここにいます。
@ md-abdul-munim's answer に追加するには、クライアント側のSDKの1つを使用することをお勧めします。 REST APIを構築してから、それらのAPIと通信するフロントエンドを構築する場合は、フロントエンドからCognitoを統合するだけの方が適しています。
バックエンドからCognitoを使用する必要がある場合、認証APIはGAリリースで利用できます。Cognitoユーザープールのベータリリースでは、認証はクライアントSDKを通じてのみ利用できます。
あなたが議論したことから、私はあなたがウェブフロントエンドからそれをやろうとしていると思います。原因として、コグニトは必要なバックエンドサポートを提供しており、プレゼンテーション層からの通信(認証、サインアップなど)を期待しています-そのため、さまざまなモバイルプラットフォーム用のSDKが見つかりました。また、Webアプリ用のSDKもあり、Javascript SDKを介してアクセスできます。
JS SDKを使用してWebフロントエンドから要求された内容を達成するための詳細なチュートリアルを次に示します Amazon Cognito Identity SDK for JavaScriptを使用してユーザープールにアクセスする
私は同様の問題を抱えており、CognitoをElixirバックエンドに統合する方法を考えていて、このライブラリを見つけました: https://github.com/aws-beam/aws-elixir
ソースコードを読むことで理解できることから、最終的にPOSTヘッダーを含むリクエスト"X-Amz-Target": "AWSCognitoIdentityProviderService.#{name_of_api_action}"
(これはここにあります: https://github.com/aws-beam/aws-elixir/blob/master/lib/aws/cognito_identity_provider.ex#L564 )。それは認証ヘッダーなしで、それらは他の場所に追加されますが、私はそれが面白いとわかりました。リクエストURLを構築する関数は次のとおりなので、呼び出されるエンドポイントを把握できるはずです。
日本語で書かれたこの記事を試してみた- https://qiita.com/yujikawa/items/e79929ed14277102f4b8 で、どうにかしてうまくいきませんでした。適切なAWS_ENDPOINT環境変数が必要です。現在、Ruby SDKを試してみることを考えています。ドキュメントの見た目からは問題ないようですが、それでもこの情報は誰かを助けるかもしれません。