刷新token UserDetailsService重复问题
来源:6-11 基于JWT实现SSO单点登录2

骑着面包去草原
2019-07-14
老师您好!
发现个很奇怪的问题:
我做的是前后台分离!
(认证服务器)(资源服务器)
认证服务器分别给两个应用发令牌
两表单验证 互相不干系 一个后台PC端网页登录 一个前端手机登录 互相不干系!token也不干系!
发现问题:
我登录PC端表单验证的url之后 获取到了token (没有问题)
我登录移动端表单验证的url之后 也获取到了token (没有问题)
先看 Oauth2AuthorizationServerConfig 的配置:
partnerAdminDetailsService 表示PC端管理员登录的UserDetails
eduUserDetailsService 表示移动端用户登录的UserDetails
这里有两个userDetailsService 当我刷新token使用/oauth/token时,Security会再一次验证我的用户信息,也就是调用userDetailsService的loadUserByUsername。 可是,不管我是用PC端登录 还是移动端登录 再刷新token时,调用的都时partnerAdminDetailsService的loadUserByUsername
我的理解是: 不应该是给哪个应用发令牌 刷新的就是哪个应用token吗?loadUserByUsername应该也是分开的啊!
我用PC端登录时 可以正确刷新token!
但是我用移动端登录时,刷新token就直接报错说用户不存在,原因是Security在验证我的信息时调的却是partnerAdminDetailsService的loadUserByUsername
移动端登录时 不应该时调用eduUserDetailsService的loadUserByUsername吗?
这是为什么?
我刷新token时传的参数都对 请求头Authorization 的Client信息都可以对上!
哪个应用刷新 我就用哪个Client信息, 我对了无数遍 参数没有问题!
1回答
-
不是这样的,userDetailsService和client没有对应关系。你这种情况,我建议你搞两套配置就是两个配置类,然后用@ConditionalOnProperties注解,根据配置只让某一套配置生效,然后给PC和移动端配置两个集群,用一套代码,不同的配置。
012019-07-15
Spring Security技术栈开发企业级认证与授权
2662 学习 · 1561 问题
相似问题