はじめに
Cognitoを用いてユーザー認証基盤作成しています。
ユースケースではサインアップをサーバー側で行う仕様なので自前でユーザー作成する必要がありました。
はじめは
sh test.sh name email company-id
といった形で引数でユーザー名等の必要な情報を渡していたのですが、
- 引数の順番を忘れる
- 引数を間違って入力した時に作成やめたい
などを感じたのでシェルスクリプトを用いて対話側でユーザー作成するプログラムを書くことにしました。
参考にしたサイトはこちらのQiita記事
コード
function AdminCreateUser() {
echo "----------------------------"
echo "ユーザー名を入力してください"
read username
echo "メールアドレスを入力してください"
read email
echo "company_idを入力してください"
read company_id
echo " 下記構成でユーザーを作成します。実行する場合は yes、実行をキャンセルする場合は no と入力して下さい."
echo "username:\t${username}"
echo "email:\t${email}"
echo "company_id:\t${company_id}"
read input
if [ -z $input ] ; then
echo " yes または no を入力して下さい."
AdminCreateUser
elif [ $input = 'yes' ] || [ $input = 'YES' ] || [ $input = 'y' ] ; then
echo " ユーザーを作成します"
aws cognito-idp admin-create-user --user-pool-id ap-northeast-1_hogehoge --username $username --message-action SUPPRESS --user-attributes Name=email,Value=$email Name=email_verified,Value=True Name=custom:company_id,Value=$company_id --desired-delivery-mediums EMAIL --temporary-password Easy1pass
#セッションの取得
session=$(aws cognito-idp admin-initiate-auth --user-pool-id ap-northeast-1_hogehoge --client-id 6hogehoge --auth-flow ADMIN_NO_SRP_AUTH --auth-parameters USERNAME=$username,PASSWORD=Easy1pass | jq -r ".Session")
# パスワードの作成
password=$(pwgen -c 8 1)
aws cognito-idp admin-respond-to-auth-challenge --user-pool-id ap-northeast-1_hogehoge --client-id 6hogehoge --challenge-name NEW_PASSWORD_REQUIRED --challenge-responses NEW_PASSWORD=$password,USERNAME=$username --session $session
echo " ユーザーを作成しました"
echo " パスワードは ${password} です"
elif [ $input = 'no' ] || [ $input = 'NO' ] || [ $input = 'n' ] ; then
echo " ユーザーの作成を中止します"
exit 1
else
echo " yes または no を入力して下さい."
AdminCreateUser
fi
}
# シェルスクリプトの実行を継続するか確認します。
AdminCreateUser
内容こちらになります。
このスクリプトでは
- ユーザーの作成
- セッション情報の取得
- 仮パスワードの更新
を行なっています。
CognitoはCLI等でユーザーを作成した場合はパスワードを再設定する必要があります。
そこを認証済みにするためにパスワードを再設定させるところまで実行させています。
注意
Macで使用する場合
brew install jq
brew install pwgen
でライブラリインストールする必要ありです
実行結果
----------------------------
ユーザー名を入力してください
test
メールアドレスを入力してください
test@gmail.com
company_idを入力してください
t
下記構成でユーザーを作成します。実行する場合は yes、実行をキャンセルする場合は no と入力して下さい.
username: test
email: test@gmail.com
company_id: t
~~~作成ログ省略~~~
ユーザーを作成しました
パスワードは dhXe3mer です
こんな感じに出力されます。
これなら必要事項順番に記入するだけだし、間違えてもno選択すれば取り消せるので便利ですね
終わりに
シェルスクリプトあまり書いたことなかったのですが、結構色々なことできるんですね
ただもっと複雑になると何らかの言語使った方がいいのかな、、と思いました
AWS CLIは入力楽になりますが記述方で詰まってしまうことが多いので勉強して使いこなせるようになりたいですね、それでは!!!