AWS cognitoの管理者用APIについて
こんにちは。CURUCURUエンジニアの長尾です。
今日はAWS cognitoについてお話ししたいと思います。
cognitoについて
AWSが提供している認証サービスです。
AdminAPIについて
AWS SDKで提供されているAPIの中には管理者が実行するAPIとユーザー自身で使う想定のAPIがあります。 ここでは管理者が実行する想定のAPIをAdminAPIと呼称します。
AdminAPIはいつ使うのか?
業務要件として管理者だけがユーザー作成をできるようなアプリケーションでは有用です。 逆にユーザー自身でサインアップ、サインインするようなアプリケーションでは使うべきではないです。 その場合はAdminAPIじゃないほうのAPIを利用すべきです。
実行サンプル
ユーザー登録サンプル
import (
"github.com/aws/aws-sdk-go/service/cognitoidentityprovider"
)
const (
AWS_ACCESS_KEY = ""
AWS_SECRET_ACCESS_KEY = ""
COGNITO_USER_POOL_ID = ""
REGION = ""
)
// sessionの作成
sess, _ := session.NewSession()
creds := credentials.NewStaticCredentials(AWS_ACCESS_KEY, AWS_SECRET_ACCESS_KEY, "")
client := cognitoidentityprovider.New(sess, aws.NewConfig().WithRegion(REGION).WithCredentials(creds))
newUserData := &cognitoidentityprovider.AdminCreateUserInput{
DesiredDeliveryMediums: []*string{aws.String("EMAIL")},
UserAttributes: []*cognitoidentityprovider.AttributeType{
// emailは必須
{
Name: aws.String("email"),
Value: aws.String("test@gmail.com"),
},
// カスタムプロパティ
{
Name: aws.String("custom:appID"),
Value: aws.String("custom_hogehoge"),
},
},
// ユーザー登録時にパスワードメールを送信をしない設定。RESENDも設定できる。RESENDは再度メール送信する。
MessageAction: aws.String("SUPPRESS"),
}
newUserData.SetUserPoolId(COGNITO_USER_POOL_ID)
newUserData.SetUsername("test@gmail.com")
_, err := client.AdminCreateUser(newUserData)
if err != nil {
fmt.Println(err.Error())
}
上記のコードを実行すると、登録されたメールアドレスにcognitoが自動生成したパスワードとともにメールが送信されます。
メールアドレス認証は確認済みに
上記のAdminCreateUser
を実行するとcognito上にユーザーが作成されますが、メールアドレスが未確認の状態になります。
基本的に管理者がユーザーを作成するようなシチュエーションではそのメールアドレスを確認する必要がないと思っています。
実はユーザー作成時にメールアドレスを確認済みにするオプションはあり、AdminCreateUserInput
に以下の項目を追加すると自動で確認済みになります。
{
Name: aws.String("email_verified"),
Value: aws.String("True"),
},
初期パスワード設定
また管理者がパスワードを設定してすぐに使う状態にすることも可能です。
もしパスワードを管理者が設定する場合はAdminCreateUser
実行時にMessageAction:SUPPRESSの指定を忘れないように。
// 初期パスワードを設定して使える状態にする。
passdata := &cognitoidentityprovider.AdminSetUserPasswordInput{
// パスワード
Password: aws.String("password"),
UserPoolId: aws.String(COGNITO_USER_POOL_ID),
Username: aws.String("test@gmail.com"),
}
_, err := client.AdminSetUserPassword(passdata)
いかがでしたでしょうか?
今回はAWS cognitoの管理者用APIに関するお話でした。
以上、長尾がお届けしました。