Java Spring@EnableResourceServer vs@EnableOAuth2Sso
到目前为止,我阅读的大多数教程都使用API网关上的Java Spring@EnableResourceServer vs@EnableOAuth2Sso,java,spring,spring-security,spring-cloud,rest-security,Java,Spring,Spring Security,Spring Cloud,Rest Security,到目前为止,我阅读的大多数教程都使用API网关上的@enableAuth2sso而不是@EnableResourceServer。有什么区别?相比之下,OAuth2Sso做了什么 详细信息:我正在为基于spring的微服务和单页应用程序实施安全/基础架构。一段时间以来,虽然我们没有安全要求,但SPA直接与不同主机上的OpenMicroService(CORS方)进行对话 现在,我使用springoauth和springzuul添加了一层安全性和网关模式。因此,我有一个带有@EnableAutho
@enableAuth2sso
而不是@EnableResourceServer
。有什么区别?相比之下,OAuth2Sso
做了什么
详细信息:我正在为基于spring的微服务和单页应用程序实施安全/基础架构。一段时间以来,虽然我们没有安全要求,但SPA直接与不同主机上的OpenMicroService(CORS方)进行对话
现在,我使用springoauth
和springzuul
添加了一层安全性和网关模式。因此,我有一个带有@EnableAuthorizationServer
的服务(uaa服务)和一个带有@EnableZuulProxy
和@EnableResourceServer
的网关。我只需要密码授权类型,因此每个SPA都有自己的登录表单,并通过网关使用uaa服务令牌端点进行身份验证,然后继续使用该令牌进行进一步请求
这种方法有什么问题吗?我是否应该使用
@enableAuth2sso
?这些注释用不同的方式标记您的服务
@EnableResourceServer注释意味着您的服务(就OAuth 2.0-资源服务器而言)需要一个访问令牌来处理请求。在调用资源服务器之前,OAuth 2.0客户端应从授权服务器获取访问令牌
@enableAuth2sso:将您的服务标记为OAuth 2.0客户端。这意味着它将负责将资源所有者(最终用户)重定向到授权服务器,用户必须在其中输入其凭据。完成后,用户将被重定向回具有授权代码的客户端(不要与访问代码混淆)。然后,客户端获取授权代码,并通过调用授权服务器将其交换为访问令牌。只有在这之后,客户端才能使用访问令牌调用资源服务器
另外,如果您查看@enableAuth2sso
注释的源代码,您将看到两件有趣的事情:
。这就是您的服务成为OAuth 2.0客户端的地方。如果您通过@enableAuth2Client
OAuth2RestTemplate
调用下游服务,则可以将访问令牌(在交换为授权代码后)转发到下游服务
。OAuth2ssoProperty只有一个属性@EnableConfigurationProperties(OAuth2ssProperties.class)
,默认情况下为String loginPath
。这将通过/login
拦截对OAuth2ClientAuthenticationProcessingFilter
的浏览器请求,并将用户重定向到授权服务器/login
- 如果希望API网关是OAuth 2.0客户端,它使用授权代码流或资源所有者密码凭据流与浏览器交互,那么答案是肯定的,您可能应该这样做。我说可能是因为我不确定
是否很好地支持资源所有者密码凭证流。无论如何,我建议您使用授权代码流,除非您真的(像真的!)有很好的理由不这样做。顺便说一句,在使用授权代码流时,您可能希望将下游微服务标记为@enableAuth2sso
@EnableResourceServer
。然后API网关将是OAuth 2.0客户端,您的微服务将是OAuth 2.0资源服务器,这在我看来是合乎逻辑的 - 如果您不需要与浏览器交互(例如,客户端凭据流),或者您的SPA使用了隐式流,那么您应该使用@EnableResourceServer,这意味着它将只接受具有有效访问令牌的请求
enableAuth2sso
注释将添加一些http过滤器,理论上是“oauth感知的”。我有了这个想法,例如,它将自动从传入的请求中提取访问令牌并转发到后端服务。但是,我还没有做到这一点(事实上,到目前为止,注释对我来说只是破坏了一堆东西——我确信这是我缺乏知识,而不是注释!).我找不到一个文档来解释许多神奇的注释或类对oauth2的作用,所以你是如何理解所有这些的?大部分我是通过研究它们的源代码来理解的。此外,在这种情况下,实验也有很大帮助:)这两个注释背后的默认配置是什么?是否可以对其进行自定义?当使用@EnableOAuth2Sso时,它会触发ResourceServerTokenServices配置,该配置需要配置由ResourceServer使用的端点,如token_key。如何在我的客户端应用程序中使用这个漂亮的注释,而不需要提供资源信息?@DanyloZatorsky@eugene@enableAuth2sso
真是老生常谈的东西,它给我带来了不推荐的错误,请建议我最新的工作替代方案,