我实现了OAuth2授权服务器和资源服务器。
有很多文件告诉我 “授权服务器和资源服务器可以分开还是不能分开”
我喜欢MSA,所以我决定分离这些服务器。
我在Internet上看到了许多有关此问题的文档,但实际上我无法继续进行。
我正在使用SpringBoot2。
Client
应用程序。/client/me
的请求Client
的控制器中,如果用户尚未通过身份验证,请重定向到Authorization Server
的登录端点/auth/oauth/authorize
。Client
应用,则用户将在我的Authorization Server
中注册(而非登录)。Authorization Server
的注册页面中,用户将输入他的username
,realusername
,password
和email
。Authorization Server
的登录表单登录。Client
将请求Resource Server
到/me
的{{1}}端点,并将access-token
的Controller映射为{{1 }}将返回Resource Server
或/me
对象作为REST API。Principal
会将REST API的结果绑定到Authentication
中
或我的Client
中的DefaultOAuth2User
。这是问题。
据我所知,CustomOAuth2User
的{{1}}端点将提供用户的资源。
例如,真实姓名或电子邮件等。
但是用户已经在SecurityContext
中进行了注册,因此所有信息都保存在Resource Server
的数据库中。
我的oauth2服务器是MSA。所以DB也已经分开了。
然后,如何通过/me
的{{1}将Authorization Server
或Authorization Server
设置为email
或realname
或Principal
对象}}端点?
答案 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的客户端。他们还需要对自己进行身份验证和授权。