結論 (Cognitoをローカルで起動するコマンド)
docker run -d -p 5000:5000 --name cognito-idp-local motoserver/moto:latest cognito-idp
注意事項
motoというAWS Serviceを擬似環境で動かせるライブラリを使用しておりますが、全ての操作はサポートされておりませんのでお気をつけください。
(以下の「簡易的なチュートリアル」で行う操作はサポートされていることを確認済です。)
簡易的なチュートリアル
前提条件
- Dockerがインストールされていること。
- AWS CLIがインストールされていること。
大まかな流れ
- ローカル用のAWS CLIプロファイル設定
- Cognitoの起動
- ユーザープールの作成
- アプリクライアントの作成
- ユーザーの作成
- ユーザーの認証
手順
ローカル用のAWS CLIプロファイル設定
aws configure --profile=local
設定は下記の通りですが、変更していただいてもかまいません。
AWS Access Key ID [None]: dummy
AWS Secret Access Key [None]: dummy
Default region name [None]: ap-northeast-1
Default output format [None]:
Cognitoの起動
docker run -d -p 5000:5000 --name cognito-idp-local motoserver/moto:latest cognito-idp
ユーザープールの作成
USER_POOL_ID=$(
aws cognito-idp create-user-pool \
--pool-name MyUserPool \
--query UserPool.Id \
--output text \
--profile local \
--endpoint-url http://localhost:5000 \
)
アプリクライアントの作成
CLIENT_ID=$(
aws cognito-idp create-user-pool-client \
--client-name MyUserPoolClient \
--user-pool-id ${USER_POOL_ID} \
--query UserPoolClient.ClientId \
--output text \
--profile local \
--endpoint-url http://localhost:5000 \
)
ユーザー情報変数の設定
COGNITO_USER_NAME=yamada-dummy
COGNITO_USER_EMAIL=dummy_yamada@sample.xxx.com
COGNITO_USER_PASSWORD=p@ssw0rd
ユーザーの作成
aws cognito-idp admin-create-user \
--user-pool-id ${USER_POOL_ID} \
--username ${COGNITO_USER_NAME} \
--user-attributes Name=email,Value=${COGNITO_USER_EMAIL} Name=email_verified,Value=true \
--message-action SUPPRESS \
--profile local \
--endpoint-url http://localhost:5000
下記のように出力されますが、"UserStatus": "FORCE_CHANGE_PASSWORD"
となっているため、
次の手順でパスワードを設定します。
{
"User": {
"Username": "yamada-dummy",
"Attributes": [
{
"Name": "email",
"Value": "dummy_yamada@sample.xxx.com"
},
{
"Name": "email_verified",
"Value": "true"
}
],
"UserCreateDate": 1632556280.0,
"UserLastModifiedDate": 1632556280.0,
"Enabled": true,
"UserStatus": "FORCE_CHANGE_PASSWORD",
"MFAOptions": []
}
}
ユーザーのパスワード設定
aws cognito-idp admin-set-user-password \
--user-pool-id ${USER_POOL_ID} \
--username ${COGNITO_USER_NAME} \
--password ${COGNITO_USER_PASSWORD} \
--permanent \
--profile local \
--endpoint-url http://localhost:5000
とくに何も出力されないので、次の手順でちゃんと設定できたか確認します。
ユーザー設定の確認
aws cognito-idp list-users \
--user-pool-id ${USER_POOL_ID} \
--profile local \
--endpoint-url http://localhost:5000
下記のように出力されますが、"UserStatus": "CONFIRMED"
となっていればOKです。
{
"Users": [
{
"Username": "yamada-dummy",
"Attributes": [
{
"Name": "email",
"Value": "dummy_yamada@sample.xxx.com"
},
{
"Name": "email_verified",
"Value": "true"
}
],
"UserCreateDate": 1632556280.0,
"UserLastModifiedDate": 1632556280.0,
"Enabled": true,
"UserStatus": "CONFIRMED",
"MFAOptions": []
}
]
}
ユーザーの認証
aws cognito-idp admin-initiate-auth \
--user-pool-id ${USER_POOL_ID} \
--client-id ${CLIENT_ID} \
--auth-flow ADMIN_NO_SRP_AUTH \
--auth-parameters "USERNAME=${COGNITO_USER_NAME},PASSWORD=${COGNITO_USER_PASSWORD}" \
--profile local \
--endpoint-url http://localhost:5000
下記のように出力されたら成功です!
{
"AuthenticationResult": {
"AccessToken": "eyJhbGciOiJSUzI1NiIsImtpZCI6ImR1bW15IiwidHlwIjoiSldUIn0.eyJpc3MiOiJodHRwczovL2NvZ25pdG8taWRwLmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20vYXAtbm9ydGhlYXN0LTFfMzNhYTAxOTNmYjZjNGE4Y2JhODAwODc4NzQ1YmM3Y2MiLCJzdWIiOiJiNDU3NWZkYi01MmExLTQ3NjEtODYyMi05MGFhZjA2ZTFmMDEiLCJhdWQiOiJ2ODU0N21qN2dheW50ZXp5a2tydzRuMHgyOSIsInRva2VuX3VzZSI6ImFjY2VzcyIsImF1dGhfdGltZSI6MTYzMjU1NjQ4NiwiZXhwIjoxNjMyNTYwMDg2LCJlbWFpbCI6InlhbWFkYS1kdW1teSJ9.Z-icBrXiic6NSbp9boT2_UM1dUNtk5LipWawp54Enc1vZxeOveLrBSCm6vKmsazyVIkZSDbYOOQ5uIxsk0Ws5n7RojIO8lSmn1pfi_Kv5G49VovZmg41E_9j7mR5Jnyzrpi1aqUKW_9TKseujFTwOZrns4v5P7Bk98QLz_HVEwBa1Lo3rM8f3QkZKG6dn4Im2P7SOOKjRl27mqGDHeHJD9cpy20llXkDmTmDaEPL7q04JmbkhmyjG9AKEBpkKVwePokOt0jxV7qOf-mRIYjk-cdd0efeRUjrR25EEjFTVw-nN4YyO6uQlBldbhOEcNKowamsPZeg6ZNRrtGdtcN_AQ",
"ExpiresIn": 3600,
"RefreshToken": "07003202-3727-40ee-b58c-4e031d963ef3",
"IdToken": "eyJhbGciOiJSUzI1NiIsImtpZCI6ImR1bW15IiwidHlwIjoiSldUIn0.eyJpc3MiOiJodHRwczovL2NvZ25pdG8taWRwLmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20vYXAtbm9ydGhlYXN0LTFfMzNhYTAxOTNmYjZjNGE4Y2JhODAwODc4NzQ1YmM3Y2MiLCJzdWIiOiJiNDU3NWZkYi01MmExLTQ3NjEtODYyMi05MGFhZjA2ZTFmMDEiLCJhdWQiOiJ2ODU0N21qN2dheW50ZXp5a2tydzRuMHgyOSIsInRva2VuX3VzZSI6ImlkIiwiYXV0aF90aW1lIjoxNjMyNTU2NDg2LCJleHAiOjE2MzI1NjAwODYsImVtYWlsIjoieWFtYWRhLWR1bW15In0.JwCdj1WJiWg8hQGwJ10GXyJiFMB1k-cvq6nJHwjqbm6CGwnFGrZQuBpugQBun3WAjHYxH1EGNO8rNMd6TUNkdCaH39WeiFOUC6TUlhzS2dxvbKEzXQazphevl5u2HIF0E5U_jSMaLoWlJSUF9yR2LPgr5ivk4omxKspL5bkZqSWWfhkJBWUk-1359Mq-CRonkB9zEGOH-3rwgRewHzs2WvTc29p67N3tTQAh38hh2tJRjMvDeCe5v98O3FSzCWiGIMyekQMaLZIP13OD6vmb_hWjcW1i2c6-FVKscDkbfZuBhIah5AIIaTp5LluaoeoUDGPg8l4c1HDgIknjapchFg"
}
}