keycloak~自定义登出接口

这篇具有很好参考价值的文章主要介绍了keycloak~自定义登出接口。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

keycloak提供了登出的接口,不过它是一个post方法,需要你根据client_id,client_secret及refresh_token进行登出操作的,有时不太灵活,所以我又自己封装了一下,通过客户端浏览器上存储的session_id进行会话登出。

kc提供的logout

  • api:{{host}}/auth/realms/fabao/protocol/openid-connect/logout
  • 请求方法:POST
  • 请求类型:x-www-form-urlencoded
  • 参数:
refresh_token:xxx
client_id:xxx
client_secret:xxx

对remove-sessions登出的封装

  // keycloak会话登出逻辑
  @GET
  @NoCache
  @Path("remove-sessions")
  public Response deleteSession(@Context HttpRequest request,
                                @QueryParam("redirect_uri") String redirectUri) {
    return removeSession(TokenUtils.getKeycloakSessionIdFromCookies(request), redirectUri);
  }
private Response removeSession(String sessionId, String redirectUri) {
    if (redirectUri == null || redirectUri.trim().length() == 0) {
      log.info("redirect_uri不正确");
      return Response.status(400).entity("redirect_uri不正确").type(MediaType.TEXT_HTML).build();
    }

    TokenUtils.removeSession(session, sessionId);//清除会话
    return Response.status(302)
        .location(HttpUtils.formatUrl(HttpUtils.removeUrlSpaceParams(redirectUri)))
        .cookie(CookieUtils.addCookie(TokenUtils.KC_EXIT_LEGACY, "1"))
        .header(HttpHeaders.SET_COOKIE,
            CookieUtils.cookieString(TokenUtils.KC_EXIT, "1", "/", null, null, -1, true, true,
                ServerCookie.SameSiteAttributeValue.NONE))
        .build();
}
public static void removeSession(KeycloakSession session, String sessionId) {
    try {
      if (sessionId != null) {
        RealmModel realmModel = session.getContext().getRealm();
        log.debugf("will remove sessionId:%s", sessionId);
        UserSessionModel userSession = session.sessions().getUserSession(session.getContext().getRealm(), sessionId);
        if (userSession != null) {
          String path = String.format("/auth/realms/%s/", session.getContext().getRealm().getId());
          CookieUtils.expireCookie(session.getContext().getRealm(), TokenUtils.KEYCLOAK_SESSION,
              path, null, false,
              session.getContext().getConnection(), ServerCookie.SameSiteAttributeValue.NONE);
          CookieUtils.expireCookie(session.getContext().getRealm(), TokenUtils.KEYCLOAK_SESSION_LEGACY, path, null,
              false,
              session.getContext().getConnection(), null);
          CookieUtils.expireCookie(session.getContext().getRealm(), TokenUtils.AUTH_SESSION_ID,
              path, null, false,
              session.getContext().getConnection(), ServerCookie.SameSiteAttributeValue.NONE);
          CookieUtils.expireCookie(session.getContext().getRealm(), TokenUtils.AUTH_SESSION_ID_LEGACY, path, null,
              false,
              session.getContext().getConnection(), null);

          AuthenticationManager.backchannelLogout(session,
              realmModel,
              userSession,
              session.getContext().getUri(),
              session.getContext().getConnection(),
              session.getContext().getRequestHeaders(),
              true);

        }
      }
    } catch (Exception ex) {
      log.error(ex);
    }

  }

通过上面的封装,我们在其它对应到keycloak的客户端,直接在浏览器上输入/auth/realms/fabao/sms/remove-sessions?redirect_uri=your-site,就可以把keycloak在当前浏览器里的会话登出了,并重定向到自己的you-site网站。文章来源地址https://www.toymoban.com/news/detail-465407.html

到了这里,关于keycloak~自定义登出接口的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • spring使用内置jetty创建提供http接口服务

    通过mvc:annotation-driven/配置,Spring MVC会启用对注解的支持,使得可以在控制器类和方法上使用注解来定义请求映射、参数绑定等操作。 具体来说,mvc:annotation-driven/会启用以下功能: 支持@Controller注解,用于标识控制器类 支持@RequestMapping注解,用于定义请求映射 支持@RequestP

    2024年04月15日
    浏览(41)
  • Linux---强制停止、退出登出、history、yum

    1.  ctrl + c 强制停止 Linux某些程序的运行,如果想要强制停止它,可以使用快捷键 ctrl + c:   命令输入错误,也可以通过快捷键ctrl + c ,退出当前输入,重新输入: 2.  ctrl + d 退出或登出 可以通过快捷键:ctrl + d ,退出账户的登录:   或者退出某些特定程序的专属页面: 注意

    2024年02月07日
    浏览(35)
  • 表情迁移 - 2D人像动起来(附带生成web服务提供api接口)

    左边原图,右边是渲染后的视频文件 本文docker容器已自带人脸模型 若还需要行为、物品、动画等追踪模型需下载后拷贝至容器内即可使用 url :http://127.0.0.1:8080/face-move method :POST params :↓ face: 2D人像图片(File) action:动作视频文件(File) config:模型(vox-adv-256.yaml) ch

    2023年04月27日
    浏览(35)
  • 文字转语音 - 搭建微软tts整合web服务提供api接口(免费)

    微软tts是业界公认文字转语音效果最佳 本文使用docker搭建微软tts服务并提供api接口对外提供服务 对接官方免费在线体验接口,搭建后可免费进行调用使用,不保证永久稳定可用 url :http://127.0.0.1:5003/tts method :POST 参数 类型 描述 text string 语音文字内容 voiceName string 发音人(

    2024年02月11日
    浏览(45)
  • 用【Java】调用百度千帆大模型并提供流式接口【SSE】响应

    接口地址: V1版本:https://apis.ydxiaoshuai.cn/xai/rest/llm/baidu/qianfan/chat?accessToken=ACCESSTOKENprompt=PROMPT V2版本使用WebFlux:https://apis.ydxiaoshuai.cn/xai/rest/llm/baidu/qianfan/v2/chat?accessToken=ACCESSTOKENprompt=PROMPT 请求方式:GET 参数替换: 替换ACCESSTOKEN为自己的 替换PROMPT为自己要提问的问题 注意:服务器带

    2024年04月24日
    浏览(48)
  • 【Docker】centos中及自定义镜像,并且上传阿里云仓库可提供使用

                                      🎉🎉欢迎来到我的CSDN主页!🎉🎉                         🏅我是平顶山大师,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的博客专栏《 【Docker】centos中及自定义镜像,并且上传阿里云仓库可提供使用

    2024年02月01日
    浏览(53)
  • 开源进展 | WeIdentity v3.1.1发布,提供无存储依赖的纯功能接口

    作为连接实体对象(人或物)的现实身份与链上身份的可信映射,实现实体对象之间安全可信的数据授权与交换,分布式身份技术解决方案在推动区块链应用繁荣及可信数据流转的过程中扮演着重要角色。 WeIdentity是由微众银行自主研发并完全开源的一套分布式多中心的技术

    2024年02月11日
    浏览(38)
  • 通用操作接口UMI:如何快速简单地给机器人提供更多学习数据?

    论文标题: Universal Manipulation Interface: In-The-Wild Robot Teaching Without In-The-Wild Robots 论文作者: Cheng Chi , Zhenjia Xu , Chuer Pan, Eric Cousineau, Benjamin Burchfiel, Siyuan Feng, Russ Tedrake, Shuran Song 项目地址: https://umi-gripper.github.io/ 导读: 斯坦福团队提出通用操纵接口(UMI)通用框架,可以直接

    2024年04月12日
    浏览(36)
  • kubernetes搭建GitLab并提供本地域名服务及业务微服务接口集成GitLab

            业务管理平台需要将本地的代码上传并进行版本管理,选择搭建gitlab私服较为合理,下面就介绍下在已有kubernetes集群上如何搭建gitlab私服及配置域名提供服务过程。         选择gitlab-ce镜像,登录dockerhub 搜索 gitlab/gitlab-ce,选择合适版本,这里需要注意的是,

    2024年02月14日
    浏览(92)
  • java Spring Boot2.7写一个接口 提供图片预览 前端可以直接用接口地址当src为图片地址使用

    我们特别是在做小程序开发时 很多图片会比较大 而小程序本身就对自身大小要求非常高 所以 图片放在服务器上提供访问链接是一种非常好的选择 我想很多前端会误认为 直接将图片放在服务器上就可以了 但其实没那么简单 因为服务器其实也可以理解为一个电脑 你就想 你自

    2024年02月07日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包