为keycloak添加可选的passkey/webauth/OTP登陆

本文描述了为keycloak配置passkey,webauth,OTP等无密码登陆的流程。本文中的部分配置可能需要Keycloak 23或者更高的版本才能正常运行。

配置Authentication部分

在keycloak的Authentication - Flow菜单中,复制一份browser flow,笔者把副本取名为了browser with optional webauth and otp

Duplicate Browser Flow

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

delete old form

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

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

add-subflow

passwordless or password or otp的subflow里添加Password FormWebAuth Passwordless AuthenticatorOTP Form三个step。着三个step分别对应密码认证,passkey/webauth认证,OTP代码(六位数的二步验证码)认证,并设置这三个step为alternative,即三种方式任选其一即可登陆。

全部添加完后的效果如下图:

Authentication Flow

Bind Flow

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

bind-flow

在required actions中启用webauth

Authentication-Required actions里,启用Webauthn Register Passwordless

enable-webauth

使用passkey登陆

添加passkey

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

set-security-key

测试Passkey登陆

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

sign-in-screen

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

choose-method

其他

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

参考

  • https://www.youtube.com/watch?v=PPoaPsfYGwQ