What happens
On a fresh codex login (stock CLI, no wrappers or automation), the CLI opens the standard OpenAI browser OAuth flow. Primary authentication with my FIDO2/CTAP2 hardware security key succeeds, and the flow then redirects to https://auth.openai.com/phone-otp/select-channel and presents a "Verify your phone number" SMS/WhatsApp one-time-code dialog. That step-up cannot be satisfied with my enrolled hardware keys, so sign-in is blocked.
Crucially, normal browser sign-in to ChatGPT and to platform.openai.com on the same account — with the same security keys — resolves correctly and never prompts for a phone. Only the codex login CLI OAuth path forces the SMS step-up. This looks like a cross-surface authenticator-policy gap: the web sign-in enforces the account's policy; the Codex CLI path falls back to an SMS channel the policy is documented to disable.
Account configuration
- OpenAI Advanced Account Security enabled
- Two FIDO2/CTAP2 hardware security keys enrolled
- No phone-based authentication factor configured
- Per OpenAI's docs, Advanced Account Security disables SMS sign-in codes and SMS account recovery (help.openai.com/en/articles/20001221), relying on passkeys/security keys.
Expected behavior
On an Advanced Account Security / security-key-only account with no phone factor, step-up verification should use an enrolled factor (security key / passkey) — not an SMS/WhatsApp OTP that AAS is documented to disable.
Actual behavior
auth.openai.com/phone-otp/select-channel offers only SMS/WhatsApp OTP to a phone number that is not a currently-configured factor on the account. With AAS + security keys and no phone factor, there is no way to complete the step-up, so Codex sign-in is unusable — while browser sign-in on the same account works.
Steps to reproduce
- An account with Advanced Account Security + FIDO2 security keys and no phone factor.
codex login (stock, macOS) → local callback server on http://localhost:1455 → genuine OpenAI OAuth at https://auth.openai.com/oauth/authorize (PKCE S256, scope openid profile email offline_access api.connectors.read api.connectors.invoke).
- Complete primary auth with the hardware security key.
- Flow redirects to
auth.openai.com/phone-otp/select-channel demanding SMS/WhatsApp OTP → blocked.
Environment
- Codex CLI (stock), macOS, June 2026.
- Reproduced with raw
codex login — no wrappers, proxies, or automation.
Impact
Users who deliberately hardened their account with Advanced Account Security + security keys (and intentionally have no phone factor) can be fully locked out of Codex by an SMS step-up they cannot complete, even though their browser sign-in on the same account succeeds.
Possibly related
#20161, #20320, #21189, and discussion #20868 — but those don't isolate the Advanced Account Security cross-surface angle (web honors AAS; the CLI path forces SMS).
Note
Account-specific details and the affected phone number have been reported to OpenAI privately and are intentionally omitted here.
What happens
On a fresh
codex login(stock CLI, no wrappers or automation), the CLI opens the standard OpenAI browser OAuth flow. Primary authentication with my FIDO2/CTAP2 hardware security key succeeds, and the flow then redirects tohttps://auth.openai.com/phone-otp/select-channeland presents a "Verify your phone number" SMS/WhatsApp one-time-code dialog. That step-up cannot be satisfied with my enrolled hardware keys, so sign-in is blocked.Crucially, normal browser sign-in to ChatGPT and to
platform.openai.comon the same account — with the same security keys — resolves correctly and never prompts for a phone. Only thecodex loginCLI OAuth path forces the SMS step-up. This looks like a cross-surface authenticator-policy gap: the web sign-in enforces the account's policy; the Codex CLI path falls back to an SMS channel the policy is documented to disable.Account configuration
Expected behavior
On an Advanced Account Security / security-key-only account with no phone factor, step-up verification should use an enrolled factor (security key / passkey) — not an SMS/WhatsApp OTP that AAS is documented to disable.
Actual behavior
auth.openai.com/phone-otp/select-channeloffers only SMS/WhatsApp OTP to a phone number that is not a currently-configured factor on the account. With AAS + security keys and no phone factor, there is no way to complete the step-up, so Codex sign-in is unusable — while browser sign-in on the same account works.Steps to reproduce
codex login(stock, macOS) → local callback server onhttp://localhost:1455→ genuine OpenAI OAuth athttps://auth.openai.com/oauth/authorize(PKCES256, scopeopenid profile email offline_access api.connectors.read api.connectors.invoke).auth.openai.com/phone-otp/select-channeldemanding SMS/WhatsApp OTP → blocked.Environment
codex login— no wrappers, proxies, or automation.Impact
Users who deliberately hardened their account with Advanced Account Security + security keys (and intentionally have no phone factor) can be fully locked out of Codex by an SMS step-up they cannot complete, even though their browser sign-in on the same account succeeds.
Possibly related
#20161, #20320, #21189, and discussion #20868 — but those don't isolate the Advanced Account Security cross-surface angle (web honors AAS; the CLI path forces SMS).
Note
Account-specific details and the affected phone number have been reported to OpenAI privately and are intentionally omitted here.