到目前为止,我阅读的大多数教程都是在API网关上使用@EnableOAuth2Sso而不是@EnableResourceServer。有什么不同吗?相比之下,OAuth2Sso所做的是什么呢?
详细信息:--我正在为基于春季的微服务和单页面应用程序实现安全/底层体系结构。有一段时间,虽然我们没有安全要求,但温泉浴场直接在不同的主机(CORS派对)上开放微服务。
现在,我将使用spring-oauth和spring-zuul添加一层安全性和网关模式。所以我有一个@EnableAuthorizationServer的服务(uaa-服务)和一个@EnableZuulProxy & @EnableResourceServer的网关。我只需要密码授予类型,所以每个SPA都有自己的登录表单,并通过网关使用uaa-服务令牌进行身份验证,然后继续使用该令牌进行进一步的请求。
这种方法有什么问题吗?我应该使用@EnableOAuth2Sso吗?
发布于 2017-06-18 19:18:10
这些注释用不同的OAuth 2.0角色标记您的服务。
@EnableResourceServer注释意味着您的服务(就OAuth 2.0-ResourceServer而言)需要一个访问令牌来处理请求。在调用资源服务器之前,应该通过OAuth 2.0客户端从授权服务器获取访问令牌。
@EnableOAuth2Sso:将您的服务标记为OAuth 2.0客户端。这意味着它将负责将资源所有者(最终用户)重定向到授权服务器,在那里用户必须输入他们的凭据。完成后,用户将使用授权代码重定向回客户端(不要混淆访问代码)。然后,客户端获取授权代码,并通过调用授权服务器将其交换为访问令牌。只有在此之后,客户端才能使用访问令牌调用资源服务器。
此外,如果您查看@EnableOAuth2Sso注释的源代码,您将看到两件有趣的事情:
@EnableOAuth2Client。这就是您的服务成为OAuth 2.0客户端的地方。当您通过OAuth2RestTemplate调用这些服务时,可以将访问令牌(在它被交换为授权代码之后)转发到下游服务。@EnableConfigurationProperties(OAuth2SsoProperties.class)。OAuth2SsoProperties只有一个属性String loginPath,默认情况下它是/login。这将通过/login拦截浏览器请求,并将用户重定向到授权服务器。我应该使用@EnableOAuth2Sso吗?
这取决于:
@EnableOAuth2Sso是否支持资源所有者密码凭据流非常好。无论如何,我建议你移动授权代码流,除非你真的(真的!)我们有充分理由不这样做。顺便说一句,在使用授权代码流时,您可能希望将下游微服务标记为@EnableResourceServer。然后,API将是OAuth 2.0客户端,而您的微服务将是OAuth 2.0资源服务器,这在我看来是合乎逻辑的。https://stackoverflow.com/questions/42938782
复制相似问题