分离OAuth2授权服务器和资源服务器

时间:2019-06-12 14:38:46

标签: spring-boot oauth-2.0 spring-security-oauth2

我实现了OAuth2授权服务器和资源服务器。

有很多文件告诉我 “授权服务器和资源服务器可以分开还是不能分开”

我喜欢MSA,所以我决定分离这些服务器。

我在Internet上看到了许多有关此问题的文档,但实际上我无法继续进行。

我正在使用SpringBoot2。

  • 场景
    1. 用户已连接到我的Client应用程序。
    2. 对安全端点/client/me的请求
    3. Client的控制器中,如果用户尚未通过身份验证,请重定向到Authorization Server的登录端点/auth/oauth/authorize
    4. 如果用户首先进入我的Client应用,则用户将在我的Authorization Server中注册(而非登录)。
    5. Authorization Server的注册页面中,用户将输入他的usernamerealusernamepasswordemail
    6. 用户的帐户已发行,用户将通过我的Authorization Server的登录表单登录。
    7. 如果登录成功,Client将请求Resource Server/me的{​​{1}}端点,并将access-token的Controller映射为{{1 }}将返回Resource Server/me对象作为REST API。
    8. Principal会将REST API的结果绑定到Authentication中 或我的Client中的DefaultOAuth2User

这是问题。

据我所知,CustomOAuth2User的{​​{1}}端点将提供用户的资源。 例如,真实姓名或电子邮件等。

但是用户已经在SecurityContext中进行了注册,因此所有信息都保存在Resource Server的数据库中。

我的oauth2服务器是MSA。所以DB也已经分开了。

然后,如何通过/me的{​​{1}将Authorization ServerAuthorization Server设置为emailrealnamePrincipal对象}}端点?

1 个答案:

答案 0 :(得分:1)

Authorization Server负责对用户或客户端(其他应用程序)进行身份验证,检查他们是否有权执行他们想做的事情,并在成功后发出令牌。这意味着它连接到的数据库应该具有所有用户凭据,客户端ID,客户端机密,角色以及其他有助于身份验证和授权的相关信息。

资源服务器负责处理来自前端的所有请求,无论是经过身份验证的请求还是已打开的请求(不需要身份验证)。它所连接的数据库应该具有与身份验证无关的信息,例如用户的性别,身高,体重,爱好等。

要回答您的问题,您可以在Resource Server中创建公开注册和其他功能的控制器。然后,该服务器将调用授权服务器。对于注册,Resource Server将凭据传递给Auth Server,以查看是否已经声明了用户名,如果尚未注册用户,则根据Auth Server的响应,Resource Server将继续进行用户注册。对于登录,前端可以直接调用Auth Server以获得令牌。

对于所有后续对受保护资源(带有访问令牌)的调用,资源服务器都需要调用Auth Server来验证令牌。为此,Spring提供了CheckTokenEndpoint/oauth/check_token)。

您还可以选中OAuth2RestTemplate。可以在Resource Server中用于向Auth Server发出REST请求。请注意,资源服务器(或您具有前端功能的任何其他内部应用程序)将是Auth Server的客户端。他们还需要对自己进行身份验证和授权。