Skip to content

Commit 6275bf8

Browse files
committed
docs(kratos): document passkey advanced configuration options
Add an 'Advanced configuration' section under the dedicated passkey strategy that documents: - authenticator_selection (attachment, require_resident_key, user_verification) - attestation (preference, allow_none, allow_self, allow_untrusted) - timeouts (registration, login) Include a warning admonition explaining that disabling attestation.allow_none rejects most consumer passkeys, and add a three-tab example (Ory CLI, Ory Network, self-hosted Kratos) showing cross-platform attachment with required user verification.
1 parent 7cc71ca commit 6275bf8

1 file changed

Lines changed: 75 additions & 0 deletions

File tree

docs/kratos/passwordless/05_passkeys.mdx

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,81 @@ Alternatively, use the Ory CLI to enable the passkey strategy:
111111
</Tabs>
112112
```
113113

114+
### Advanced configuration
115+
116+
The passkey strategy exposes additional options that control the WebAuthn ceremony and post-registration policy. All options are
117+
optional. Defaults match the behavior before these options were introduced, so existing deployments do not need to change
118+
anything.
119+
120+
| Option | Type | Default | What it controls |
121+
| ---------------------------------------------- | -------- | -------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
122+
| `authenticator_selection.attachment` | string | `"platform"` | Which authenticators are eligible: `"platform"` (Touch ID, Windows Hello), `"cross-platform"` (security keys), or `""` for no preference. |
123+
| `authenticator_selection.require_resident_key` | boolean | `true` | Whether the authenticator must create a client-side discoverable credential. |
124+
| `authenticator_selection.user_verification` | string | `"preferred"` | Whether biometrics or a PIN are required: `"required"`, `"preferred"`, or `"discouraged"`. |
125+
| `attestation.preference` | string | `"none"` | Attestation conveyance preference sent to the authenticator: `"none"`, `"indirect"`, `"direct"`, or `"enterprise"`. |
126+
| `attestation.allow_none` | boolean | `true` | Accept passkeys that provide no attestation statement. Most consumer passkeys, including iOS, use none attestation. |
127+
| `attestation.allow_self` | boolean | `true` | Accept passkeys that provide a self-signed attestation statement with no external certificate authority. |
128+
| `attestation.allow_untrusted` | boolean | `true` | Accept passkeys whose attestation certificate chain has no trusted root. |
129+
| `timeouts.registration` | duration | library default (5m) | Timeout for the registration ceremony. Use Go duration format, for example `"60s"` or `"5m"`. |
130+
| `timeouts.login` | duration | library default (5m) | Timeout for the login ceremony. Use Go duration format. |
131+
132+
:::warning
133+
134+
Disabling `attestation.allow_none` rejects most consumer passkeys. iOS does not support attestation at all, and Android and
135+
Windows support it inconsistently. Only restrict attestation if your deployment requires attested authenticators, such as
136+
FIDO-certified security keys in a regulated environment. The default configuration allows all attestation types so that any
137+
standards-compliant passkey can register.
138+
139+
:::
140+
141+
The following example configures cross-platform authenticators (such as a HID token or YubiKey) with required user verification:
142+
143+
```mdx-code-block
144+
<Tabs>
145+
<TabItem value="cli" label="Ory CLI">
146+
<CodeBlock language="shell">{`ory patch identity-config <your-project-id> \\
147+
--add '/selfservice/methods/passkey/config/authenticator_selection/attachment="cross-platform"' \\
148+
--add '/selfservice/methods/passkey/config/authenticator_selection/user_verification="required"'
149+
`}
150+
</CodeBlock>
151+
</TabItem>
152+
<TabItem value="network" label="Ory Network" default>
153+
<CodeBlock language="yaml" title="config.yml">{`selfservice:
154+
methods:
155+
passkey:
156+
enabled: true
157+
config:
158+
authenticator_selection:
159+
attachment: cross-platform
160+
user_verification: required`}</CodeBlock>
161+
</TabItem>
162+
<TabItem value="self-hosted" label="Self-hosted Ory Kratos" default>
163+
<CodeBlock language="yaml" title="config.yml">{`selfservice:
164+
methods:
165+
passkey:
166+
enabled: true
167+
config:
168+
rp:
169+
display_name: Your Application name
170+
id: localhost
171+
origins:
172+
- http://localhost:4455
173+
authenticator_selection:
174+
attachment: cross-platform
175+
require_resident_key: true
176+
user_verification: required
177+
attestation:
178+
preference: none
179+
allow_none: true
180+
allow_self: true
181+
allow_untrusted: true
182+
timeouts:
183+
registration: 5m
184+
login: 5m`}</CodeBlock>
185+
</TabItem>
186+
</Tabs>
187+
```
188+
114189
### Identity schema
115190

116191
If you want to use a custom identity schema, you must define which field of the identity schema is the display name for the

0 commit comments

Comments
 (0)