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

Separating OAuth2 Authorization Server and Resource Server

我正在实施 OAuth2 授权服务器和资源服务器。

而且有很多文档告诉我 'Authorization Server and Resource Server can be Separated or not'

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

我在网上看到了很多关于这个问题的文档,但是我无法在实践中继续下去。

我正在使用 SpringBoot2。

这里是问题。

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

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

我的 oauth2 服务器是 MSA。所以数据库也被分离了。

那么,如何通过Resource Server的[将emailrealname设置为PrincipalAuthenticationCustomOAuth2User对象/me端点?

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

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

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

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

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