当前位置: 首页 > 知识库问答 >
问题:

Keycloak注销不适用于公开REST服务的“只承载”应用程序

白浩荡
2023-03-14

我无法注销用户。注销适用于“机密”应用程序,但不适用于“只承载”应用程序(注销后其余服务仍可访问)。

我有以下配置:

>

  • 我在Keycloak中定义了一个“数据库”客户端应用程序,其访问类型为“只承载”(创建该应用程序的目的是公开受基于用户角色的Keycloak保护的REST web服务)

    我在keycloak中定义了一个“rest_service”客户端应用程序,其访问类型为“机密”(创建该应用程序的目的是登录用户,并允许在成功登录后访问“只承载”REST服务)。下面描述的工作流是在这个应用程序中使用REST web服务实现的

    我正在执行以下步骤:

    >

  • 在URL http://localhost:8180/auth/realms/demo/protocol/openid-connect/auth上执行http GET请求,该请求将用户重定向到由Keycloak处理的登录页面

    用户使用他的凭据(使用在Keycloak中定义的用户凭据)执行登录

    Keycloak将用户重定向到步骤1中传递的“redirect_uri”。在此步骤中,Keycloak还提供“state”和“code”值作为请求参数。

    在用户被重定向回应用程序后,我将在步骤3中收到的“代码”交换为令牌,在http://localhost:8180/auth/realms/demo/protocol/openid-connect/token上执行POST请求,该请求已成功完成

    访问令牌可用后,我继续访问“只承载”REST web服务。

    注意:“只承载”服务公开的REST web服务是不可访问的,除非用户已经登录并为其分配了正确的“角色”。

    如果我执行用户注销,那么仅承载应用程序公开的其余web服务仍然可以访问。在Keycloak服务器中,我得到以下警告消息:“demo Realm:REST_Service中的user adminuser没有注销一些客户机”

    我尝试通过三种方式实现注销:

    >

  • 重定向到URL http://localhost:8180/auth/realms/demo/protocol/openid-connect/logout,传入redirect_uri和client_id参数

    向http://localhost:8180/auth/realms/demo/protocol/openid-connect/logout发送一个POST请求,该请求传入头中的授权承载和client_id、refresh_token、client_secret和redirect_uri

    由“只承载”服务公开的REST服务,它执行以下方法调用:HttpServletRequest request.logout()

    以上两种方法都不起作用。

    附:我不想深入很多细节,因为即使这样,帖子也足够长了。如果我错过了什么,请告诉我,我会提供额外的信息(如果可能,我也可以附上实际的项目)

  • 共有1个答案

    费承载
    2023-03-14

    这是相当旧的,但它可以帮助其他人。我不太记得我做了什么来解决这个问题,但下面的细节可能会有所帮助。

    为了使该令牌失效,使其不能再使用,您必须向以下endpoint执行POST请求:/auth/realms/{REALM}/users/{USER_UUID}/logout并在标头中添加访问令牌。

    PS:如果有人尝试这样做,并对他有效,请添加一个评论,这样我就可以确定这是一个有效的解决方案,并帮助其他有这个问题的人。谢谢!

     类似资料:
    • 我正在执行以下步骤: > http GET请求在URL http://localhost:8180/auth/realms/demo/protocol/openid-connect/auth上执行,它将用户重定向到Keycloak处理的登录页面 用户使用他的凭据(使用在Keycloak中定义的用户的凭据)执行登录 如果执行用户注销,那么仅承载应用程序公开的REST web服务仍然可以访问。在Key

    • 问题内容: 我将使用keycloak保护我的golang应用程序,但keycloak本身不支持go语言。 github中有一些go适配器作为一个开放项目,已经将openId connect协议实现为提供程序服务,但是它们没有提供有关如何将库与应用程序集成的示例或文档。 如何使用Golang与Keycloak互动? 问题答案: 如您所指出的,没有用于golang的官方keycloak适配器。但是实现

    • 使用邮递员,我可以毫无问题地获得令牌。如果单击和,我会得到以下代码片段: 当我尝试在Rest Assured中对请求建模时,我得到了一个400错误,但不清楚为什么: 我哪里出了问题很明显吗?是否应该将键/值传递到中?

    • 我在从(移动)应用程序调用KeyCloak注销endpoint时遇到问题。 支持此方案,如其文档中所述: /realms/{realm-name}/protocol/openid-connect/logout 注销endpoint注销经过身份验证的用户。 可以将用户代理重定向到endpoint,在这种情况下,活动用户会话将注销。然后,用户代理被重定向回应用程序。 endpoint也可以由应用程序直

    • 我的Web应用程序需要访问用户Google数据,我决定使用OAuth2,问题是Google不接受我的redirect_uri,它是我的服务器在Intranet上的本地IP地址。 过去我使用过OpenID,它接受本地redirect\u uri。如何用OAuth2解决这个问题? 到目前为止,我找到的唯一解决方案是使用,但这需要用户复制粘贴访问令牌。有更好的解决方案吗?

    • 我正在构建一个Rails 4应用程序,其中包含前端网站和公开的API。该API用作移动应用程序和桌面应用程序的后端。 我在Heroku上部署了这个应用程序。因为网站有一个订购系统,我决定强制ssl全球。当我发出HTTP请求时,站点成功地将我重定向到HTTPS。 但是,当我使用命令行中的cURL向我公开的API发出HTTP请求时,我没有得到预期的响应。相反,我在我的Heroku日志中看到了一条301