Keycloak的Authenticator Provider示例

335 阅读2分钟

介绍

在Keycloke的源码中,带有Authenticator SPI实现的案例,但是我发现示例里面的README不是很友好,同时我在编译和打包示例代码的时候,并不顺畅。因此,我把它的代码拷贝到了我自己的项目中。

鉴于官方的文档(22.0.4)与example的代码和说明有一些出入,特意重新在自己的环境中编译、打包和运行了一遍。

本文的重点,不是如何实现Secret Question这个Authenticator,而是对官方examples/providers/authenticator这个example的部署和测试进行说明。

与官方example代码不一样的地方

其实我只做了一个地方的修改,就是把secret-question.ftlsecret-question-config.ftl放到了resources/theme-resources/templates目录下,这也是根据官方文档来对代码做的唯一一个改动。

打包和部署

下载代码:

git clone git@github.com:yulshi/keycloak-providers.git

打包

mvn clean package

部署,其实就是把打好包的jar文件拷贝到Keycloak的providers目录下,然后重新启动Keycloak。

cp authenticator-provider/target/authenticator-provider.jar $KEYCLOAK_HOME/providers

测试

  • keycloak上的设置
    • 在Keycloak的控制台上选择一个realm
    • 从左边菜单中选择Authentication,在右边窗口里面选择Flow name为browser的Flow,然后从左右边的...中选择Duplicate,来克隆一份,命名为secret-question
    • secret-question中的secret-question forms这个sub flow中的加号那里点击,选择Add step
    • 从弹出的对话框中选择,Secret Question的Authenticator并添加
    • 设置Secret Question的Requirement为Required
    • 然后将这个flow绑定到Browser flow
    • 最后,不要忘记,在Required actions这个tab里面,启用(enable)Secret Question这个required action。
  • 登录realm的account,来测试登录的效果
    • 在输入用户名/密码后,会导航到一个标题叫做Setup Secret Question的页面,要求你设置问题的答案。这个页面就是Secret Question这个required action来设置的。
    • 在第二次登录的时候,输入用户名/密码,会导航到一个标题为登录名的页面,要求你回答问题,你输入了上一步设置的答案,就能通过验证,否则不能。