実施したい事
こうなってるのを、
こうしたい
先に結論
作り直した方が早いです。(こちらの方が楽)
1 Cognito作成 (MFAはAuthenticatorアプリケーションのみ)
2 Cognitoの多要素認証にSMS メッセージを追加する (Cognito作成時には追加しない)
3 各ユーザーはAuthenticatorアプリケーションでログインしておく
4 各ユーザーに電話番号を追加 (3実施前に電話番号を追加するとMFAがSMSになってしまいます)
本題
1 Cognito作成 (MFAはSMS メッセージのみ)
2 Cognitoの多要素認証にAuthenticator アプリケーションを追加する (作成時でも良いです)
3 アプリケーションクライアントの認証フローに「ALLOW_ADMIN_USER_PASSWORD_AUTH」を追加する
4 作成したユーザーでユーザー認証を実施する
t-ueda4:~ t-ueda$ aws cognito-idp admin-initiate-auth --region ap-southeast-2 --user-pool-id ap-southeast-2_XXXXX --client-id XXXXX --auth-flow ADMIN_USER_PASSWORD_AUTH --auth-parameters USERNAME=t-ueda,PASSWORD=XXXXX { "ChallengeName": "SMS_MFA", "Session": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "ChallengeParameters": { "CODE_DELIVERY_DELIVERY_MEDIUM": "SMS", "CODE_DELIVERY_DESTINATION": "+***********83", "USER_ID_FOR_SRP": "t-ueda" } } t-ueda4:~ t-ueda$
5 AccessTokenを発行する
t-ueda4:~ t-ueda$ aws cognito-idp admin-respond-to-auth-challenge --region ap-southeast-2 --user-pool-id ap-southeast-2_XXXXX --client-id XXXXX --challenge-name SMS_MFA --session "4で出力されたSession" --challenge-responses USERNAME="4で出力されたUSER_ID_FOR_SRP",SMS_MFA_CODE="4で出力されたSMSコード" { "ChallengeParameters": {}, "AuthenticationResult": { "AccessToken": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "ExpiresIn": 3600, "TokenType": "Bearer", "RefreshToken": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "IdToken": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" } } t-ueda4:~ t-ueda$
6 Authenticator アプリケーションの有効化 (AccessTokenは""で囲わない)
t-ueda4:~ t-ueda$ aws cognito-idp associate-software-token --region ap-southeast-2 --access-token 5で出力されたAccessToken { "SecretCode": "XXXXXXXXXXXXXXXXXXX" } t-ueda4:~ t-ueda$
7 googleAuthenticator等で、このコード(SecretCode)を登録する
8 トークンの検証 (AccessTokenは""で囲わない)
t-ueda4:~ t-ueda$ aws cognito-idp verify-software-token --region ap-southeast-2 --access-token 5で出力されたAccessToken --user-code "googleAuthenticator等で発行されてるトークン" { "Status": "SUCCESS" } t-ueda4:~ t-ueda$
9 ユーザーMFA設定を変更 (「希望する配信方法の選択」に変更)
感想
4〜8をユーザーに実施してもらう手間を考えると(実施出来る権限を付与)、出来るのなら再作成してしまった方がいいような気がしてます。