DOS窓で学ぶAWS Cognito(ユーザ作成・メール認証・ログイン・認証済api gateway)
アジェンダ
1, cognitoのユーザープール(ユーザーの認証する仕組み。認可はAPI Gatewayで行う)を作成
2, 作成したユーザープールでアプリクライアント(このユーザプールにアクセスするためのID)を作成
※クライアントシークレットを生成のチェックを外す!
3, API Gatewayを作る(サンプルのpet)を作成。メソットリクエストで認可を、cognitoで作成したユーザープールに指定(なんか最初AWS_IAMしかなかった)
4, DOS窓からcognitoのユーザープールの「ユーザ作成・メール認証・ログイン・認証済api gateway」を行う
手順の1~3は参考URLを確認(※クライアントシークレットを生成のチェックを外す、を忘れないで!)
https://dev.classmethod.jp/articles/sign-up-and-sign-in-by-cognito-with-awscli/
ユーザー認証していない状態でAPI Gatewayを使うとエラーになる。
1 2 |
curl https://xxxxxxxxxxxx.execute-api.ap-northeast-1.amazonaws.com/demo/pets {"message":"Unauthorized"} |
DOS窓からユーザー作成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
aws cognito-idp sign-up --client-id ユーザープールのアプリクライアントID --username 受信できる認証用メアド --password 単純すぎないパスワード --user-attribute "Name=email,Value=受信できる認証用メアド" # パスワードが短すぎてダメ!大小英数字記号・8文字以上なら文句ないだろ! Parameter validation failed: Invalid length for parameter Password, value: 3, valid range: 6-inf An error occurred (InvalidPasswordException) when calling the SignUp operation: Password did not conform with policy: Password not long enough # ユーザ作成に成功すれば、登録データが返ってくる { "UserConfirmed": false, "CodeDeliveryDetails": { "Destination": "u***@s***.jp", "DeliveryMedium": "EMAIL", "AttributeName": "email" }, "UserSub": "乱数っぽいやつ" } |
ユーザープール->全般設定->ユーザーとグループを見ると、ちゃんと登録出来ている。
認証メールが来るので、認証コードを確認
Your confirmation code is 認証コード
DOS窓からメアド認証する
1 |
aws cognito-idp confirm-sign-up --client-id ユーザープールのアプリクライアントID --username 受信できる認証用メアド --confirmation-code 認証コード |
DOS窓からログイン。一時間有効の3種類のトークンがもらえる。
1 2 3 4 5 6 7 8 9 10 11 |
aws cognito-idp admin-initiate-auth --user-pool-id ユーザープールの管理画面に書いてあるID --client-id ユーザープールのアプリクライアントID --auth-flow ADMIN_NO_SRP_AUTH --auth-parameters "USERNAME=受信できる認証用メアド,PASSWORD=単純すぎないパスワード" { "ChallengeParameters": {}, "AuthenticationResult": { "AccessToken": "長すぎ!千文字くらいある!", "ExpiresIn": 3600, "TokenType": "Bearer", "RefreshToken": "長すぎ!千文字くらいある!", "IdToken": "長すぎ!千文字くらいある!" } } |
IDトークン(千文字くらいある…。長すぎ!)を使って、APIを取得してみる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
curl -H "Authorization:ここにIDトークンを記述" https://bm3g8sgkb0.execute-api.ap-northeast-1.amazonaws.com/demo/pets [ { "id": 1, "type": "dog", "price": 249.99 }, { "id": 2, "type": "cat", "price": 124.99 }, { "id": 3, "type": "fish", "price": 0.99 } ] |
手動でステップ・バイ・ステップでやると、分かりやすい!