DjangoでCognitoの利用 ~登録・認証~
本記事は、boto3を利用して行っている。
準備は以下記事を参照。
Cognitoへのユーザー登録
sign_up を使用して、ユーザーの情報を登録する。
cognito.sign_up(
ClientId=[APP_CLIENT_ID],
SecretHash=[ハッシュ値],
Username=[ユーザー名],
Password=[パスワード],
UserAttributes=[付属情報],
);設定次第では、登録したメールアドレスなどに、確認をコードが送信されるので、確認コードをCognitoへ送信する。
確認コードの送信
confirm_sign_up を使用して確認コードをCognitoへ送信することで、登録が完了する。
res = self.__cognito.confirm_sign_up(
ClientId=[APP_CLIENT_ID],
SecretHash=[ハッシュ値],
Username=[ユーザー名],
ConfirmationCode=[確認コード],
);認証
登録したユーザーを認証する。要するにログイン。
cognito.admin_initiate_auth(
UserPoolId=[POOL_ID],
ClientId=[APP_CLIENT_ID],
AuthFlow = "ADMIN_USER_PASSWORD_AUTH",
AuthParameters = {
"USERNAME": [ユーザー名],
"PASSWORD": [パスワード],
"SECRET_HASH" : [ハッシュ値],
}
);リクエストが成功すると、結果としては、下記のような内容が返却される。
{
'ChallengeName': 'SMS_MFA'|'SOFTWARE_TOKEN_MFA'|'SELECT_MFA_TYPE'|'MFA_SETUP'|'PASSWORD_VERIFIER'|'CUSTOM_CHALLENGE'|'DEVICE_SRP_AUTH'|'DEVICE_PASSWORD_VERIFIER'|'ADMIN_NO_SRP_AUTH'|'NEW_PASSWORD_REQUIRED',
'Session': 'string',
'ChallengeParameters': {
'string': 'string'
},
'AuthenticationResult': {
'AccessToken': 'string',
'ExpiresIn': 123,
'TokenType': 'string',
'RefreshToken': 'string',
'IdToken': 'string',
'NewDeviceMetadata': {
'DeviceKey': 'string',
'DeviceGroupKey': 'string'
}
}
}主に使用するのは、 IdToken 、 AccessToken 、 RefreshToken 。
IdToken
awsのサービスに使用できるトークン。
ユーザーの管理などに使用できるが、永続ではないため、サービス内の永続的なユーザーの識別子としては使用できない。
AccessToken
cognito上のユーザー情報を操作できるアクセス権
RefreshToken
AccessTokenの有効期限が切れてしまった場合に、再発行するときに使用する。
認証破棄
要するにログアウト。
cognito.revoke_token(
Token=[リフレッシュトークン],
ClientId=[APP_CLIENT_ID],
ClientSecret=[APP_CLIENT_SECRET]
);このリクエスト成功後は、各種tokenが無効になる。
参考
CognitoIdentityProvider — Boto3 Docs 1.26.22 documentation (amazonaws.com)



