面向公共客户端的 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。 UAACloud 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 OAuth 2.0 客户端

spring boot spring-security-oauth2 默认的authorize和token接口的区别

Spring Boot 2 和 OAuth2 客户端凭据不受支持的授权类型

在 Spring Boot 中创建动态服务