最新项目中遇到一个问题,目前公司有多个项目,但是每个项目都有不同的数据库,最近准备对底层架构进行改进,要求一个账户可以登录所有项目(但是必须经过授权才能登录,比如有三个项目,A,B,C,用户被授权可以登录A后才可以进行登录,B项目虽然也是公司的项目,但是并没有给当前用户权限,所以不能登录)
我的想法是:设计一个单独的用户数据库,分别记录用户的详细信息和被授权可以登录的项目,工作人员可以授权User一个登录A项目的权限,此时如果User登录A项目,此时的流程大概是这样的
请问如果按照以上流程进行设计,是否存在相关的不合理的地方,或者是否有更好的施行方案?
建一个公共的数据库, 存着用户的权限, 登录时从这个表取出用户的权限, 如果有权限则才登录, 并得到相应的操作权限
建立一个用户数据库没有问题,另外就是不要让个项目直接访问这个数据库,而是提供一个公用的认证API,还有就是认证和授权需要分开处理,认证可以使用统一的API但是权限的管理各系统可能差别很大,很难统一管理。另外不太了解你的授权码是个什么。我做过一个公共的身份认证项目,你可以参考一下:
1.用户使用用户密码访问认证API,换取一个令牌
2.客户端(浏览器)存储令牌到缓存
3.客户端向项目A的每个请求都必须携带令牌
4.项目A的服务器每次都验证令牌的签名
5.签名验证通过就可以确认用户身份合法,给他分配权限
6.项目A中的具体接口中检证权限
当然你也可以将令牌存储到会话里,就不必每个请求都得验证一次令牌
合并数据库,这个有点麻烦,如果表设计是一样的话直接移植数据,将项目的数据库改成唯一的数据库