本文描述了为keycloak配置passkey,webauth,OTP等无密码登陆的流程。本文中的部分配置可能需要Keycloak 23或者更高的版本才能正常运行。
配置Authentication部分
在keycloak的Authentication - Flow菜单中,复制一份browser flow,笔者把副本取名为了browser with optional webauth and otp。

在新的flow中,删除browser password form和下面的全部step/flow:

先添加一个step,选择username Form,设置为required:

在下面添加一个subflow,命名为passwordless or password or otp:

在passwordless or password or otp的subflow里添加Password Form,WebAuth Passwordless Authenticator,OTP Form三个step。着三个step分别对应密码认证,passkey/webauth认证,OTP代码(六位数的二步验证码)认证,并设置这三个step为alternative,即三种方式任选其一即可登陆。
全部添加完后的效果如下图:

Bind Flow
点击flow右上角的Action,把新创建的flow bind到browser flow(浏览器登陆):

在required actions中启用webauth
在Authentication-Required actions里,启用Webauthn Register Passwordless:

使用passkey登陆
添加passkey
在帐号面板的的Signing in一节中,可以看到新增了一个Passwordless的选项,点击Set up Security key即可设置Passkey。

测试Passkey登陆
在输入帐户后,即可看到登陆方式界面

点击Security Key即可使用Passkey登陆。

其他
如果强制要求用户设置passkey / OTP,Required Actions里的Set as default action需要被勾选。