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

박예찬*_*박예찬 4 oauth-2.0 spring-boot spring-security-oauth2

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

并且有很多文档告诉我“授权服务器和资源服务器可以分离或不分离”

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

我在互联网上看到了很多关于这个问题的文件,但在实践中我不能再继续了。

我正在使用 SpringBoot2。

  • 设想
    1. 用户连接到我的Client应用程序。
    2. 对安全端点的请求 /client/me
    3. Client的控制器中,如果用户未通过身份验证,则重定向到Authorization Server的登录端点/auth/oauth/authorize
    4. 如果用户首先进入我的Client应用程序,用户将在我的Authorization Server.
    5. Authorization Server注册页面,用户将输入他的username, realusername,passwordemail
    6. 用户的帐号已签发,用户将通过我Authorization Server的登录表单登录。
    7. 如果登录成功,Client将请求Resource Server/me端点access-token,和Resource Server的控制器,可映射为/me返回PrincipalAuthentication对象的REST API。
    8. Client将结合有REST API的成绩进入DefaultOAuth2UserCustomOAuth2User在我的SecurityContext

这是问题。

据我所知,Resource Server/me端点将提供用户的资源。例如,实名或电子邮件等。

但用户已注册Authorization Server,因此所有信息都保存在Authorization Server的数据库中。

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

那么,我如何通过的端点设置emailorrealnamePrincipalorAuthenticationCustomOAuth2UserObject ?Resource Server/me

Vij*_*ana 6

授权服务器负责对用户或客户端(其他应用程序)进行身份验证,检查他们是否被授权做他们想做的事情,如果成功,它会发出一个令牌。这意味着它连接到的数据库应该具有所有用户凭据、客户端 ID、客户端机密、角色和其他有助于身份验证和授权的相关信息。

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

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

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

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