gpt4 book ai didi

java - Spring @EnableResourceServer 与 @EnableOAuth2Sso

转载 作者:IT老高 更新时间:2023-10-28 13:44:13 24 4
gpt4 key购买 nike

到目前为止,我阅读的大多数教程都在 API 网关上使用 @EnableOAuth2Sso 而不是 @EnableResourceServer。有什么区别?相比之下,OAuth2Sso 做了什么?

详细信息:我正在为基于 spring 的微服务和单页应用程序实现安全/基础架构。一段时间以来,虽然我们没有安全要求,但 SPA 直接与不同主机(CORS 方)上的开放微服务对话。

现在我正在使用 spring-oauthspring-zuul 添加一层安全性和网关模式。所以我有一个带有 @EnableAuthorizationServer 的服务(uaa-service)和一个带有 @EnableZuulProxy@EnableResourceServer 的网关。我只需要 password 授权类型,因此每个 SPA 都有自己的登录表单,并通过网关使用 uaa-service token 端点进行身份验证,然后继续使用该 token 进行进一步的请求。

这种方法有什么问题吗?我应该使用 @EnableOAuth2Sso 吗?

最佳答案

这些注释用不同的 OAuth 2.0 roles 标记您的服务.

@EnableResourceServer 注释意味着您的服务(根据 OAuth 2.0 - 资源服务器)需要访问 token 才能处理请求。在调用资源服务器之前,需要通过 OAuth 2.0 客户端从授权服务器获取访问 token 。

@EnableOAuth2Sso: 将您的服务标记为 OAuth 2.0 客户端。这意味着它将负责将资源所有者(最终用户)重定向到用户必须输入其凭据的授权服务器。完成后,用户将使用授权码重定向回客户端(不要与访问码混淆)。然后客户端获取授权码并通过调用授权服务器将其交换为访问 token 。只有在此之后,客户端才能使用访问 token 调用资源服务器。

另外,如果你看一下 @EnableOAuth2Sso 注释的源代码,你会看到两个有趣的东西:

  • @EnableOAuth2Client。这是您的服务成为 OAuth 2.0 客户端的地方。如果您通过 OAuth2RestTemplate 调用这些服务,则可以将访问 token (在交换为授权码之后)转发给下游服务。
  • @EnableConfigurationProperties(OAuth2SsoProperties.class)。 OAuth2SsoProperties 只有一个属性String loginPath,默认为/login。这将拦截 OAuth2ClientAuthenticationProcessingFilter/login 的浏览器请求,并将用户重定向到授权服务器。

Should I be using @EnableOAuth2Sso?

这取决于:

  • 如果您希望 API 网关成为 OAuth 2.0 客户端,它使用 授权代码流资源所有者密码凭据流 与浏览器交互,那么答案是肯定的,你可能应该。我说可能是因为我不确定 @EnableOAuth2Sso 是否很好地支持资源所有者密码凭据流。无论如何,我建议你使用授权代码流,除非你真的(真的!)有充分的理由不这样做。顺便说一句,在使用授权代码流时,您可能希望将下游微服务标记为 @EnableResourceServer。然后 API 网关将是 OAuth 2.0 客户端,而您的微服务将是 OAuth 2.0 资源服务器,这在我看来是合乎逻辑的。
  • 如果您不需要与浏览器交互(例如 Client Credentials Flow)或者您有使用 Implicit Flow 的 SPA,那么您应该使用 @EnableResourceServer,这意味着它将仅接受具有有效访问 token 的请求。

关于java - Spring @EnableResourceServer 与 @EnableOAuth2Sso,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42938782/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com