【问题标题】:Spring security client PKCE with Keycloak带有 Keycloak 的 Spring 安全客户端 PKCE
【发布时间】:2020-04-15 23:22:09
【问题描述】:

我有一个使用 Spring Security 5.2.1 并由 Keycloak 保护的 Java 应用程序。
Keycloak 中的客户端是一个公共的 openid-connect 客户端。
它工作正常。

我现在需要使用 PKCE(代码交换证明密钥)。
由于 Spring Security 5.2.0.M2 中添加了对 PKCE 的客户端支持,并且我使用 Spring Security 5.2.1,因此我可以使用 Spring Security 来实现它。
这是个好消息。
'坏' 消息是,我在 Web 或 Spring Security 文档中几乎找不到任何关于我必须如何实现它的内容。 在 keycloak.json 中添加 "enable-pkce": true 不起作用,我没有找到任何明确的示例。

是否有一些文档、网站或其他任何东西,描述了如何实现这个?

非常感谢!

【问题讨论】:

  • 你想知道如何在 Spring 客户端中实现这个吗?
  • 是的,在 Spring 客户端中。

标签: java spring-security keycloak pkce


【解决方案1】:

来自 Spring Security 参考文档https://docs.spring.io/spring-security/site/docs/5.3.1.RELEASE/reference/html5/#initiating-the-authorization-request

当满足以下条件时,将自动使用PKCE:

  1. client-secret 被省略(或为空)

  2. client-authentication-method 设置为“无”(ClientAuthenticationMethod.NONE)

【讨论】:

  • 感谢您的回答,但我不确定我是否理解。我只是在我的 keycloak.json 中设置了 enable-pkce,这就是我所做的全部更改。当我在 Keycloak 客户端上将 PKE 设置为 S256 时,我的应用程序不再工作,它在尝试重定向(HTTP 302)时永远循环,并且在 Keycloak 日志中,我看到了很多这样的内容:(下一条评论中的消息,没有空间了)
  • INFO [org.keycloak.protocol.oidc.endpoints.AuthorizationEndpoint](默认任务 32)PKCE 强制客户端没有代码质询方法。 WARN [org.keycloak.events] (默认任务 32) type=LOGIN_ERROR, realmId=someRealmId, clientId=someClientId, userId=null, ipAddress=11.11.11.11, error=invalid_request, response_type=code, redirect_uri=localhost/xxx/sso/login, response_mode=查询
  • 更多信息,我使用 Keycloak Spring Security 适配器
猜你喜欢
  • 1970-01-01
  • 2016-04-05
  • 2016-10-31
  • 2017-11-06
  • 1970-01-01
  • 2017-11-28
  • 2019-10-26
  • 2018-02-14
  • 2017-09-12
相关资源
最近更新 更多