4

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

并且有很多文件告诉我“授权服务器和资源服务器是否可以分离”

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

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

我正在使用 SpringBoot2。

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

这是问题。

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

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

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

那么,我如何通过's 的端点设置emailrealnamePrincipalAuthenticationCustomOAuth2User对象?Resource Server/me

4

1 回答 1

6

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

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

要回答您的问题,您可以在资源服务器中创建公开注册和其他功能的控制器。然后该服务器将调用授权服务器。对于注册,Resource Server 会将凭据传递给 Auth Server,以查看用户名是否已被认领,如果未注册用户并根据 Auth Server 的响应,Resource Server 将继续进行用户注册。登录时,前端可以直接调用Auth Server获取token。

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

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

于 2019-06-13T10:01:55.370 回答