AWS cognitoの管理者用APIについて

  • #開発
  • #AWS
  • #golang

こんにちは。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に関するお話でした。

以上、長尾がお届けしました。

最近ハマっている海外ドラマはロック&キー

ロック&キー