keycloak~RequiredActionProvider中获取表单认证前URL的参数

在keycloak中,我们在进行brower浏览器的表单认证时,一般在跳到本页面时,URL上会有redirect_uri这种参数,用来告诉keycloak,在认证成功后的跳转地址,你在表单认证控制器中,可以通过context.getHttpRequest().getUri().getQueryParameters().getFirst("redirect_uri")进行获取,而当你为brower认证流程添加RequiredAction行为之后,你需要在进入RequiredAction时带上这些参数,你是不能直接通过getQueryParameters()方法获取的,因为它之前的页面不是来源页,而是认证表单页,那么keycloak对于这种问题是如何处理的呢?

RequiredActionProvider中的方法

页面渲染

 @Override
 public void requiredActionChallenge(RequiredActionContext context) {
    Response challenge = context.form()
                .createForm("login-sms-otp-config.ftl");
     context.challenge(challenge);
 }

表单提交

 @Override
 public void processAction(RequiredActionContext context) {
  context.success();
}

添加获取认证表单中URL参数

很显示,获取上一个页面的参数,应该在requiredActionChallenge渲染页面方法中实现

  private static String getRedirectUri(RequiredActionContext context) {
    AuthenticationSessionModel authSession = context.getAuthenticationSession();

    if( authSession.getClientNotes().containsKey("redirect_uri")){
      return authSession.getClientNotes().get("redirect_uri");
    }
    return "https://www.abc.com";
  }

我们认证页面将来源页的参数临时存储到了authSession.getClientNotes()这个字典中,供认证流程中使用。

getClientNotes()返回的URL参数集合如下图:

posted @   张占岭  阅读(80)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
历史上的今天:
2019-04-26 git命令总结
2018-04-26 springboot~WebTestClient的使用
2016-04-26 Jquery~跨域异步上传文件
2012-04-26 将不确定变成确定~LINQ DBML模型可以对应多个数据库吗
2012-04-26 将不确定变成确定~LINQ查询两种写法,性能没有影响,优化查询应该是“按需查询”
2012-04-26 将不确定变成确定~frameset页面不能正确加载
点击右上角即可分享
微信分享提示