You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Keycloak的WebAuthn场景下OIDC流程选择及配置问询

问题解答

1. 移动应用适合的OIDC流程

你提到“移动应用无法使用授权码流程”是个误解——**授权码流程+PKCE(Proof Key for Code Exchange)**才是OAuth 2.0/OIDC针对移动应用的标准推荐流程,完全替代不安全的隐式流程。

至于WebView录入指纹体验差的问题,根本原因是不该用WebView处理认证。正确做法是使用AppAuth这类库,调用系统自带的浏览器组件(比如Android的Chrome Custom Tabs、iOS的Safari View Controller)完成OIDC认证流程。这种方式下,WebAuthn(Passkey)会直接唤起系统原生的生物识别弹窗(指纹、面容ID等),体验和系统级应用一致,远优于WebView内的弹窗。

2. Keycloak配置Passkey优先、用户名密码回退的认证规则

要实现“已注册Passkey则优先使用,否则回退用户名密码”的逻辑,需自定义Keycloak认证流并绑定到客户端:

步骤1:启用WebAuthn认证器

在Keycloak后台的「领域设置」→「认证」→「认证器」中,确保webauthn-passwordless(Passkey属于无密码WebAuthn类型)已启用。

步骤2:创建自定义认证流

  1. 进入「领域设置」→「认证」→「流程」,复制默认的「浏览器」认证流,命名为Passkey-First Browser Flow。
  2. 编辑这个新流程:
    • 将原有的「用户名密码表单」执行步骤移至下方。
    • 添加新执行步骤:选择webauthn-passwordless认证器,设置为「条件执行」。
    • 点击该WebAuthn步骤的「配置」,在「执行条件」中添加判断逻辑:检查用户是否已注册Passkey凭证,用Keycloak表达式语言实现:
      user.getCredentials().stream().anyMatch(c -> c.getType().equals("webauthn-passwordless"))
      
    • 将WebAuthn步骤的「要求」设为「可选」,这样当条件不满足(用户无Passkey)时,会自动执行下一个步骤。
    • 确保下方的「用户名密码表单」步骤设置为「必需」。

步骤3:绑定到客户端

打开移动应用对应的Keycloak客户端,在「认证流程覆盖」中,将「浏览器流程」设置为刚才创建的Passkey-First Browser Flow,保存配置即可。

配置完成后,用户访问认证页面时:

  • 已注册Passkey的用户会直接触发WebAuthn生物识别认证;
  • 未注册Passkey的用户会自动跳转至传统用户名密码登录界面。

内容的提问来源于stack exchange,提问作者arnabkaycee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 10:24:55