14
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Cognitoをローカル環境で動かしてみる

Posted at

結論 (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"
    }
}
14
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?