ここでは、AWS SDK for Go V2 を使って、Go 言語から Amazon Cognito を操作するサンプルコードを示します。
Go 言語で AWS SDK を使うための開発環境 は構築済みとします。
指定したユーザープール内のユーザーリストを取得する (ListUsers)
ユーザーのパスワードを変更する (AdminSetUserPassword)
ユーザー名とパスワードで認証して ID トークンとアクセストークンを取得する (AdminInitiateAuth)
下記のように AdminInitiateAuth
API でユーザー認証を行うには、Cognito ユーザープールの設定で対象のクライアントを選択し、ALLOW_ADMIN_USER_PASSWORD_AUTH
にチェックを入れておく必要があります。
認証に成功すると、API の戻り値の AuthenticationResult
に各種トークン情報が格納されます。
ChallengeName =
ChallengeParameters = map[]
AuthenticationResult:
IdToken = eyJraWQiOiJvVU-UYPb...長いので省略...QlbXNjaDF4cHBRWWU
AccessToken = eyJraWQiOiJ2a1W...長いので省略...MeaGq7Q-ecVo7UrQA
RefreshToken = eyJjdHkiOiJKV1...長いので省略...FmbPUE4M-CFXNp9aA
TokenType = Bearer
ExpiresIn = 3600(sec)
場合によっては、次のように追加のチャレンジリクエストが返されることがあります。
ChallengeName = NEW_PASSWORD_REQUIRED
ChallengeParameters = map[USER_ID_FOR_SRP:user1 requiredAttributes:["userAttributes.email"] userAttributes:{"email":""}]
Session:
AYABeGUOL0khu9R69cL1oW5AlDMAHQABAAdTZXJ2aWNlABBDb2duaXRvVXN
lclBvVsigrdMZ2QLwOwDNyG485jP45wBAn19cJKXxHhAGETrvfQjHMSOIyz
...長いので省略...
Uk9oosogIT_QEIXF5OrGGtWq7ELm56gXiW1hc06rp3cBYFbOlI5pjp36Jfd
SfWaFjq0yyWYVAwEA4NG0DgtW3xZjto4NpHVCIVdxBmmolAKDtbkvVsWNFQ
その場合は、続けて AdminRespondToAuthChallenge
API を呼び出し、ChallengeName
で指定されたチャレンジ(上記の場合は NEW_PASSWORD_REQURED
)に答える必要があります。
このとき、チャレンジ要求時に提示された Session 情報が必要になります。
下記は、AdminRespondToAuthChallenge
の呼び出し方の例です(ここでは全部ハードコーディングしちゃってます)。
func adminRespondToAuthChallenge() {
client := cognitoidentityprovider.NewFromConfig(loadAwsConfig())
session := "AYABeJDb9BhR5D...長いので省略...fZAPW2Ynnslwww"
input := &cognitoidentityprovider.AdminRespondToAuthChallengeInput{
UserPoolId: &userPoolId,
ClientId: &clientId,
ChallengeName: "NEW_PASSWORD_REQUIRED",
ChallengeResponses: map[string]string{
"USERNAME": "user1",
"NEW_PASSWORD": "Password#123",
"userAttributes.email": "user1@example.com",
},
Session: &session,
}
_, err := client.AdminRespondToAuthChallenge(context.TODO(), input)
if err != nil {
panic(err)
}
fmt.Println("Auth challenge succeeded")
}
チャレンジに正しく応答できると、AdminRespondToAuthChannelgeInput
API の戻り値の AuthenticationResult
フィールドに、ID トークンやアクセストークンが格納されます。
これは、AdminInitiateAuth
API の戻り値と同様です。
チャレンジに応答した後に、再度 AdminInitiateAuth
を呼び出して各トークンを取得することもできます。
関連記事