如何在 Spring 中使用 OAuth2 和 JWT 令牌代表特定用户调用受保护的资源?
How to call a protected resource on behalf of a specific user using OAuth2 and JWT token in Spring?
所以我们有一个身份验证服务器,UI 应用程序在其中获取访问令牌,然后它与 API 服务器通信,这一切都很好。现在我们正在构建第三个应用程序,它需要 SSO 来验证同一用户,这也很好。
但是,在某些情况下,第三个应用程序需要使用 API 服务器上的一些资源,根据我的理解,我们需要使用 client-id/secret 从 auth 服务器获取令牌,然后使用访问令牌发送请求。这看起来也不错,但是我不确定 API 服务器将如何授权该令牌(对此的提示会很棒).
但主要问题是我们希望代表用户发送此请求。这是因为 API 服务器需要审核所有用户的活动。 我们如何使用 Spring Boot/OAuth2 和 JWT 令牌实现此目的?
我查看了文档,我知道 @EnableOauth2Sso @EnableAuthorisationServer 等,但这种情况尚不清楚,我什至不确定它是否已在 Spring 中实施。
如果这个场景没有实现,你有什么建议?有没有这方面的经验,可以分享一下吗?
您的 API 服务器扮演资源服务器的角色。有一个为此目的设计的注释:@EnableResourceServer
。然后,您的客户端应用程序将使用方便的 OAuth2RestTemplate
.
使用此资源
有两种方法可以正确配置资源服务器并使其正常工作:
- 直接在您的资源服务器应用程序中使用 public 密钥:这样当客户端应用程序尝试使用授权服务器提供的令牌从资源服务器获取资源时,这将验证是否令牌本身有效。
- 配置资源服务器询问授权服务器给定的访问令牌是否有效,并根据响应允许或拒绝获取资源。
我已经使用第一种方法发布了 sample app on github。在那里您可以看到授权服务器、客户端和资源服务器之间的交互,以及此实现所需的所有配置。希望对你有帮助。
所以我们有一个身份验证服务器,UI 应用程序在其中获取访问令牌,然后它与 API 服务器通信,这一切都很好。现在我们正在构建第三个应用程序,它需要 SSO 来验证同一用户,这也很好。
但是,在某些情况下,第三个应用程序需要使用 API 服务器上的一些资源,根据我的理解,我们需要使用 client-id/secret 从 auth 服务器获取令牌,然后使用访问令牌发送请求。这看起来也不错,但是我不确定 API 服务器将如何授权该令牌(对此的提示会很棒).
但主要问题是我们希望代表用户发送此请求。这是因为 API 服务器需要审核所有用户的活动。 我们如何使用 Spring Boot/OAuth2 和 JWT 令牌实现此目的?
我查看了文档,我知道 @EnableOauth2Sso @EnableAuthorisationServer 等,但这种情况尚不清楚,我什至不确定它是否已在 Spring 中实施。
如果这个场景没有实现,你有什么建议?有没有这方面的经验,可以分享一下吗?
您的 API 服务器扮演资源服务器的角色。有一个为此目的设计的注释:@EnableResourceServer
。然后,您的客户端应用程序将使用方便的 OAuth2RestTemplate
.
有两种方法可以正确配置资源服务器并使其正常工作:
- 直接在您的资源服务器应用程序中使用 public 密钥:这样当客户端应用程序尝试使用授权服务器提供的令牌从资源服务器获取资源时,这将验证是否令牌本身有效。
- 配置资源服务器询问授权服务器给定的访问令牌是否有效,并根据响应允许或拒绝获取资源。
我已经使用第一种方法发布了 sample app on github。在那里您可以看到授权服务器、客户端和资源服务器之间的交互,以及此实现所需的所有配置。希望对你有帮助。