- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
到目前为止,我阅读的大多数教程都在 API 网关上使用 @EnableOAuth2Sso
而不是 @EnableResourceServer
。有什么区别?相比之下,OAuth2Sso
做了什么?
详细信息:我正在为基于 spring 的微服务和单页应用程序实现安全/基础架构。一段时间以来,虽然我们没有安全要求,但 SPA 直接与不同主机(CORS 方)上的开放微服务对话。
现在我正在使用 spring-oauth
和 spring-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?
这取决于:
@EnableOAuth2Sso
是否很好地支持资源所有者密码凭据流。无论如何,我建议你使用授权代码流,除非你真的(真的!)有充分的理由不这样做。顺便说一句,在使用授权代码流时,您可能希望将下游微服务标记为 @EnableResourceServer
。然后 API 网关将是 OAuth 2.0 客户端,而您的微服务将是 OAuth 2.0 资源服务器,这在我看来是合乎逻辑的。关于java - Spring @EnableResourceServer 与 @EnableOAuth2Sso,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42938782/
我是一名优秀的程序员,十分优秀!