一、该问题的重现步骤是什么?
场景:我用blade cloud版本开发运管平台,分别给一个集团的三个工厂各部署一套,功能有些类似也有差异,既有统一对接主数据,也需要对接各厂自己的多项业务系统, 因为都涉及第三方业务系统对接,为了能满足个性化要求, 我是按三个系统分别开发的,每套系统的用户均为本厂区安保部和领导,人数在20人以内,再设一个总管理员。
现在集团有一个大的统一身份认证平台,我需要将运管平台以一个系统方式注册到该平台。问题是我内部如何实现这3个系统的用户鉴权? 目前考虑2种方式拿不定主意:
方式一:因为已经用了微服务架构,所以想三个厂区使用公共的唯一bladex-system,共用一个nacos+redis+mysql,把三个厂的用户集中到这一个用户表里。
问题:是不是角色,部门,菜单都要集中到一处;担心配菜单权限这些会不会有问题,会不会影响各厂一些定制化开发,权限配置会不会混乱?
方式二:三套系统+redis+mysql完全独立部署以便适用不同业务对接需要,再另外用boot开发一个运管统一门户,就是在三个系统之上再套个壳,提供一个统一登录页,并实现接收大平台的登录信息来分别跳转,如果是管理员就跳到一个门户来选择哪个厂区。由这个统一门户来对接集团的统一门户。
问题:
1.运管统一门户以什么实现方式免登录跳到各厂的运管平台? oAuth2吗?不想太复杂,都是自己开发的。
2.是不是得把三个系统的用户表不停往运管门户同步?如果一个厂的用户要新增,就在该厂平台和运管门户都新增一下?
二、你期待的结果是什么?实际看到的又是什么?
能给个推荐意见
三、你正在使用的是什么产品,什么版本?在什么操作系统上?
系统用bladex 4.2 门户拟用 bladex boot 4.6 centos
四、请提供详细的错误堆栈信息,这很重要。
五、若有更多详细信息,请在下面提供。
选方式二,并且你不需要做用户数据同步。
大概改造如下:
一、用boot做统一登录门户,用它自带的单点登录功能来实现系统间的跳转,相关文档参考:5.1.8.x https://center.javablade.com/blade/BladeX-Doc/src/branch/master/%E7%AC%AC5%E7%AB%A0%20%E5%8A%9F%E8%83%BD%E7%89%B9%E6%80%A7/5.1%20OAuth2%E8%AE%A4%E8%AF%81%E7%B3%BB%E7%BB%9F
二、改造boot服务里这段代码的逻辑:https://center.javablade.com/blade/BladeX-Boot/src/branch/master/src/main/java/org/springblade/modules/auth/service/BladeUserDetailService.java
因为用oauth2单点登录(bladex已经有了并且都对接好了),是有clientId的概念的,你在boot的系统里的【应用管理】创建对应的clientId和clientSecret对应你的三套系统,配置oauth2认证的时候在 BladeUserDetailService 里可以直接获取到clientId。
三、获取到clientId后,可直接通过httpUtil来调用你三套系统自带的token接口(根据不同的clientId来调用不同的服务地址),把用户名密码调用password模式的的登录接口,调用成功返回jwt,则说明在boot版本的oauth2service里也认证成功了,你到时候再把用户信息组装返回即可。或者你也可以自己写一个开放接口,接受用户名+密码,返回用户信息。
四、返回信息后oauth2单点模式认证成功,会自动跳转回你对应三套系统的首页,并且带上code获取token(这个bladex也做完了,你无需自己开发),获取到token后,系统会自动设置jwt并且跳转至首页。
五、还有一个要求,就是这四套系统的sign-key、public-key、private-key都需要保持一致才可以走通认证流程。
扫一扫访问 Blade技术社区 移动端