Skip to content

fix: set authenticatorAttachment to platform on iOS for passkey creation#2417

Merged
broody merged 1 commit intomainfrom
fix/ios-chrome-passkey-creation
Feb 13, 2026
Merged

fix: set authenticatorAttachment to platform on iOS for passkey creation#2417
broody merged 1 commit intomainfrom
fix/ios-chrome-passkey-creation

Conversation

@broody
Copy link
Contributor

@broody broody commented Feb 13, 2026

Problem

On Chrome iOS, clicking "Create Passkey" in the popup triggers the native Apple passkey overlay to show a "Sign in with passkey" dialog instead of creating a new passkey. Safari iOS works fine.

Root Cause

Chrome iOS (with Google Password Manager integration since Chrome 136) interprets authenticatorAttachment: undefined differently from Safari. When unset, Chrome iOS shows a sign-in dialog offering existing passkeys rather than directly creating a new one.

Fix

Explicitly set authenticatorAttachment: "platform" on iOS devices. This tells the browser we specifically want to create a new platform-bound passkey using Face ID/Touch ID, which triggers the correct "Create Passkey" flow on both Safari and Chrome iOS.

Note: The popup flow itself may no longer be necessary since Safari 15.5+ supports publickey-credentials-create in cross-origin iframes (and the iframe already has this permission set). Could be a follow-up to remove the popup entirely.

Chrome iOS (with Google Password Manager) shows a 'Sign in' dialog
instead of 'Create Passkey' when authenticatorAttachment is undefined.
Explicitly setting it to 'platform' on iOS ensures the native overlay
correctly prompts for passkey creation.
@vercel
Copy link

vercel bot commented Feb 13, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
controller-example-next Ready Ready Preview Feb 13, 2026 9:36pm
keychain Ready Ready Preview Feb 13, 2026 9:36pm
keychain-storybook Ready Ready Preview Feb 13, 2026 9:36pm

Request Review

@claude
Copy link
Contributor

claude bot commented Feb 13, 2026

Claude finished @broody's task —— View job


I'll analyze the controller repository changes and update the documentation in the docs-repo directory accordingly.

Tasks:

  • Read the changed controller files to understand the passkey fix
  • Explore the docs-repo directory structure
  • Identify relevant documentation that may need updates
  • Update documentation if changes affect user-facing behavior
  • Commit and push any documentation changes

Analysis:

The PR fixes a Chrome iOS specific issue where authenticatorAttachment: undefined was causing the browser to show a "Sign in with passkey" dialog instead of creating new passkeys. The fix explicitly sets authenticatorAttachment: "platform" on iOS devices (lines 45-49 in packages/keychain/src/hooks/account.ts).

Found relevant documentation files that mention passkeys/WebAuthn:

  • headless-authentication.md - Contains WebAuthn authentication examples
  • signer-management.md - Contains extensive passkey documentation and platform support details
  • native/ios.md - iOS-specific integration docs

Conclusion:

No documentation updates needed. This fix is an internal implementation improvement that resolves a Chrome iOS-specific passkey creation issue. It doesn't change:

  • User-facing API or behavior
  • Authentication flow or requirements
  • Platform support or compatibility
  • Any documented features or usage patterns

The change maintains the existing passkey functionality while fixing a browser-specific bug, so current documentation remains accurate and complete.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant