首页 > 解决方案 > 使用 Spring Boot 的资源所有者密码凭证

问题描述

我有一个与 Spring Boot 服务器(最新版本2.2.2.RELEASE)通信的遗留桌面应用程序。我正在使用 OAuth2 进行身份验证(由 提供spring-boot-starter-oauth2-client)。我想避免更改客户端,因为它是一个遗留应用程序。它能够收集凭据并通过 HTTP 基本身份验证启动会话,然后将会话的 cookie 保留在以下请求中。

鉴于这种情况,我认为最好的选择是使用 OAuth2 资源所有者密码凭据授权。有了这个,我们可以通过 OAuth2 令牌交换收集的凭据。我们有两个选择:

选项1:

修改客户端应用程序以通过 Authorization 标头使用访问令牌。这将需要对授权提供者进行初始调用,以通过令牌交换收集的凭据。

选项 2:

继续使用 Spring 会话并将有关 OAuth 客户端的信息存储在服务器中。

我发现这个项目几乎是这样做的:https ://github.com/jgrandja/spring-security-oauth-5-2-migrate 。它messaging-client-password定义了一个客户端 ( ),使用authorization-grant-type: password该客户端将激活 Spring Boot 中的 OAuth2 资源所有者密码凭据授权。

它创建一个 OAuth2 客户端并将其信息存储在会话中,然后 Spring 能够在进一步的请求中使用该客户端。这个项目的问题是它似乎只在 OAuth 客户端用于发出 HTTP 请求(例如,调用另一个服务的端点)而不向控制器提供身份验证时工作。您可以在此处找到有关此内容的更多信息:

克服这个问题的自然想法是实现代理并在请求中使用 OAuth2 客户端。好吧,Spring 已经提供了一个代理解决方案,即 Spring Cloud Gateway。但我不知道用这个设置来实现这一点。

有什么见解吗?我的想法是正确的还是应该采用不同的方法?

标签: springspring-bootspring-securityoauth-2.0spring-security-oauth2

解决方案


推荐阅读