Repository navigation
Set LoA / ACR (refeds.org/profile/mfa) for BOTH passkey and password+OTP paths — Condition gets disabled on passkey login #51044
Replies: 2 comments
|
Could you please provide the flows in the other scenarios you've mentioned trying? They could help others better understand the variations. Regarding the conditionals with no executions, you should be able to use |
|
Thanks a lot — the Below are the flow variations I tried, in case they help others understand the problem space. Goal in all cases (Keycloak 26.7, used as a SAML IdP upstream of an academic federation SP):
Variant A — both conditions in one conditional subflow Result: Password path works (OTP + MFA context). Passkey path skips OTP correctly, BUT emits no MFA context — because Variant B — LoA condition alone in its own conditional subflow (no executing step) Result: Password path works. Passkey path fails with Variant C — separate auth-method branches (passkey vs password+OTP as alternatives) Result: Produced the log warning Fix based on your suggestion (Variant B + Allow Access): The idea: I'll report back once I've tested both paths (checking the actual |
Uh oh!
There was an error while load 8000 ing. Please reload this page.
Body
Keycloak version: 26.7
Goal: A browser flow used as a SAML IdP (upstream of an academic federation SP) where:
AuthnContextClassRef = https://refeds.org/profile/mfaRealm ACR-to-LoA mapping:
MFA→https://refeds.org/profile/mfa→ LoA 1The SP client also has
Minimum ACR Value = https://refeds.org/profile/mfaset.What works:
refeds.org/profile/mfa.Condition - credential, credential=webauthn-passwordless, Included=Off).The problem:
The MFA/ACR signal to the SP is ONLY produced by the
Condition - Level of Authenticationexecution. I have confirmed thatMinimum ACR Valueon the client alone does NOT produce the assertion value — removing the LoA condition removes the MFA signal for all login paths.When
Condition - Level of Authenticationis placed in the same conditional subflow asCondition - credential+OTP Form, the passkey login disables the whole subflow (because the credential condition evaluates false), so the LoA is never set → SP gets no MFA context on passkey logins.When I put
Condition - Level of Authenticationalone in its own conditional subflow (to make it independent of the passkey/OTP logic), the passkey login fails withAuthenticationFlowException/invalid_user_credentials— the WebAuthn assertion itself succeeds (log showscredential_type=webauthn-passwordless,user_verification_checked=true), but the flow cannot complete because that subflow has no executing step after the condition.Current flow:
Server log on the failing passkey attempt (LoA condition alone in its own conditional subflow):
Note: the WebAuthn ceremony clearly succeeds (
credential_type=webauthn-passwordless,user_verification_checked=true); the failure happens afterwards while completing the flow.Question:
How can I set the LoA / ACR (
refeds.org/profile/mfa) so it is applied on both the password+OTP path and the passkey path, given that:Condition - Level of Authenticationaborts the passkey login (no executing step after the condition), andIs there a supported executing step I can add to a "LoA-only" conditional subflow so it completes cleanly after a passkey assertion? Or does this hybrid (passkey + password/OTP + step-up LoA signal) currently require a custom SPI?
This looks closely related to the missing built-in conditional described in
#42350
("Built-in conditional: user already authenticated via WebAuthn/Passkey").
Any guidance on a supported configuration-only approach — or confirmation that an SPI is required — would be greatly appreciated.
All reactions