はじめに
AWS Cognitoを使った認証で、signInStep
の遷移が分かりづらかったのでフローチャートにしました。
間違っている or 情報が古い可能性があるので、参考にする際はご注意ください。
フローチャート
ユーザー新規追加~初回ログイン
ユーザーのMFA設定には以下の5パターンがある
ユーザー追加~初回ログインの段階では、①か⑥にしかならない模様
- ①SMS のみ
- ②Authenticator アプリケーションのみ
- ③SMS (利用可能な場合)、それ以外の場合は認証アプリケーション
- ④認証アプリケーション (利用可能な場合)、それ以外の場合は SMS
- ⑤希望する配信方法の選択
→ユーザーにどちらで認証するか選択させ、選択した方法のフローに移行する - ⑥上記いずれにも該当しない
⑥-1. TOTPトークンを登録する前
→この状態でログインしようとするとCONTINUE_SIGN_IN_WITH_TOTP_SETUP
チャレンジが返され、TOTPトークンの登録が促される
⑥-2. TOTPトークン登録済み
→この状態でログインしようとするとCONFIRM_SIGN_IN_WITH_TOTP_CODE
チャレンジが返され、登録したTOTPトークンが求められる
ユーザーのMFA設定の変更
フローチャートではないが、補足情報として以下記載
- ユーザープールでSMS, TOTPどちらも利用可能
- ユーザーの電話番号が登録済み
- ユーザーがTOTPトークンを登録済み
上記をすべて満たす場合、AdminSetUserMFAPreferenceCommand
などでユーザーのMFA設定を変更できる
import { AdminSetUserMFAPreferenceCommand } from "@aws-sdk/client-cognito-identity-provider";
const setPref = async () => {
const SMSMfaSettings = {
Enabled: false,
PreferredMfa: false,
}
const SoftwareTokenMfaSettings = {
Enabled: true,
PreferredMfa: true,
}
const input = {
SMSMfaSettings,
SoftwareTokenMfaSettings,
Username: "<UUID>",
UserPoolId: "<ユーザープールID>",
};
const command = new AdminSetUserMFAPreferenceCommand(input);
await client.send(command);
}
① | ② | ③ | ④ | ⑤ | ||
---|---|---|---|---|---|---|
SMSMfaSettings | Enabled | true | false | true | true | true |
PreferredMfa | true | false | true | false | false | |
SoftwareTokenMfaSettings | Enabled | false | true | true | true | true |
PreferredMfa | false | true | false | true | false |
AdminSetUserMFAPreferenceCommand
APIで⑥の状態にはできなさそう
一応、②の状態がほぼ⑥-2と同じと思われる
登録済みユーザーのログイン
CONTINUE_SIGN_IN_WITH_MFA_SELECTION
はデフォルト値を設定するわけではなく、
あくまでその回はどちらで認証するかを聞いているだけなので、
デフォルトも変えたい場合はAdminSetUserMFAPreferenceCommand
などのAPIを別途叩く必要がある