And*_*tos 34 java spring spring-security rest-security spring-cloud
到目前为止,我读过的大多数教程都使用@EnableOAuth2Sso
而不是@EnableResourceServer
API网关.有什么区别?什么是OAuth2Sso
相反呢?
详细信息:我正在为基于Spring的微服务和单页应用程序实现安全/基础架构.有一段时间,虽然我们没有安全要求,但是在不同的主机(CORS方)上,SPA直接与开放式微服务进行了对话.
现在我使用spring-oauth
和添加一层安全性和网关模式spring-zuul
.所以我有一个服务(uaa-service)@EnableAuthorizationServer
和一个带@EnableZuulProxy
&的网关@EnableResourceServer
.我只需要密码授权类型,因此每个SPA都有自己的登录表单,并通过网关对uaa-service令牌端点进行身份验证,然后继续使用该令牌进行进一步的请求.
这种方法有什么问题吗?我应该用@EnableOAuth2Sso
吗?
Dan*_*sky 69
这些注释使用不同的OAuth 2.0角色标记您的服务.
@EnableResourceServer注释意味着您的服务(就OAuth 2.0而言 - 资源服务器)需要访问令牌才能处理请求.在调用资源服务器之前,应通过OAuth 2.0 Client从授权服务器获取访问令牌.
@ EnableOAuth2Sso:将您的服务标记为OAuth 2.0客户端.这意味着它将负责将资源所有者(最终用户)重定向到用户必须输入其凭据的授权服务器.完成后,用户将被重定向回具有授权码的客户端(不要与访问代码混淆).然后客户端通过调用授权服务器获取授权代码并将其交换为访问令牌.只有在此之后,客户端才能使用访问令牌调用资源服务器.
另外,如果你看一下@EnableOAuth2Sso
注释的源代码,你会看到两件有趣的事情:
@EnableOAuth2Client
.这是您的服务成为OAuth 2.0客户端的地方.它可以将访问令牌(在交换授权码之后)转发给下游服务,以防您通过这些服务调用这些服务OAuth2RestTemplate
.@EnableConfigurationProperties(OAuth2SsoProperties.class)
.OAuth2SsoProperties只有一个属性String loginPath
是/login
默认.这将截取浏览器对/login
by的请求,OAuth2ClientAuthenticationProcessingFilter
并将用户重定向到Authorization Server.我应该使用@ EnableOAuth2Sso吗?
这取决于:
@EnableOAuth2Sso
支持资源所有者密码凭据流程非常好.无论如何,我建议你使用授权代码流程,除非你真的(真的!)有充分的理由不这样做.顺便说一下,使用授权代码流时,您可能希望将下游微服务标记为 @EnableResourceServer
.然后API网关将是OAuth 2.0客户端,您的微服务将是OAuth 2.0资源服务器,这对我来说似乎合乎逻辑.