面向公共客户端的 Spring Boot 2 授权服务器 (PKCE)
Posted
技术标签:
【中文标题】面向公共客户端的 Spring Boot 2 授权服务器 (PKCE)【英文标题】:Spring Boot 2 Authorization Server for public clients (PKCE) 【发布时间】:2020-09-13 03:59:55 【问题描述】:是否可以在当前版本的 Spring Security 中为 PKCE 身份验证创建授权服务器?
我进行了研究,发现了这个授权服务器项目https://github.com/spring-projects-experimental/spring-authorization-server,但该项目没有可用的示例。
我还发现 spring 推荐 Keycloak 作为授权服务器,但它不适合我的情况。 我们需要能够针对远程服务获取和验证用户,然后仅使用授权服务器来生成和验证 jwt 令牌。据我所知,Keycloak 也应该拥有用户,对吗?所以最好的解决方案是自定义 spring 独立授权服务器。以某种方式可能吗?谢谢!
【问题讨论】:
【参考方案1】:你可以看看这个项目:CloudFoundry User Account and Authentication (UAA) Server。
UAA
是 Cloud Foundry
的(Spring MVC)组件,但它可以用作独立的 OAuth2 server
。它可以支持外部认证服务。还有一个实现 PKCE 的 Pull Request:https://github.com/cloudfoundry/uaa/pull/939(尚未合并,但正在审核中)。
您可以在baeldung.com 上找到有关如何使用UAA
的示例。
【讨论】:
【参考方案2】:据我所知,Spring 框架还有一种授权服务器的实现。它是spring-security-oauth 项目的一部分。但是该项目已进入维护模式。
根据此migration guide,将创建新的授权服务器项目(您已经找到)以更改旧解决方案。
在我看来,现在有几种可能的选择:
-
使用旧的旧版spring-security-oauth。 old auth server 的更多示例
使用 Keycloak、Auth0、Okta 等外部服务
【讨论】:
但如果我说得对的话,旧的 oauth 项目中不支持 PKCE。那就是为什么问这个问题。无法使用外部服务,因为我们需要从不同的身份提供者获取用户,然后自己生成 jwt。 前段时间我对 spring auth server 的可能选项进行了一些研究,不幸的是,我没有以任何方式从我的答案中找到任何选项,祝你好运解决你的问题以上是关于面向公共客户端的 Spring Boot 2 授权服务器 (PKCE)的主要内容,如果未能解决你的问题,请参考以下文章
将 Keycloak 授权服务与 Spring Boot(资源服务器)一起使用
Spring Boot 2 - 自动装配服务时对 Feign 客户端的不满意依赖
spring boot spring-security-oauth2 默认的authorize和token接口的区别