微服务是分布式系统,权限控制分为三部分:用户认证、用户权限和服务之间的鉴权。
一,用户认证
1,方案一:比如sc OAuth框架,所有的http请求都携带token,被访问的服务再去授权服务器,验证token的有效性。
2、方案二:OAuth2,https://oauth.net/2/,基于RFC 6749,支持三种授权方式:
1)Authorization Code授权
与OAuth类似。
2)Passwork授权方式
根据用户名与密码来获取access token,只需要获取一次。但存在安全隐患,即登录的系统可能拿到你的密码。
3)Client Credentials授权
当app只想访问自己的资源时,可以使用Client Credentials授权。该方式通过client id和secret请求一次authorization server来获取token
OAuth2的典型处理流程:
i.得到授权码Code
ii.获得access Token
iii.通过access Token,获得OpenID
iiii.通过access Token和OpenID调用API,获得用户授权信息
3,方案二:jwt,认证协议,把用户信息和授权范围序列化后,放入一个json字符串,通过授权服务器的私钥签名得到一个token,所有的资源服务器都拥有一个公钥,通过公钥验证合法性之后,通过反序列之后就能得到用户信息和授权范围。
分为三部分:
1)head,格式jwt+加密方法sha256
2) payload,base64编码
3)检验部分,将head+playload通过私钥进行加密,放在Http头域的Authorization字段
二,用户权限
前端基于用户权限,渲染不同的内容以及控制按钮。
后端则在API网关进行统一的权限拦截,由API网关调用sso服务器进行检验,以获得权限声明。
三,服务之间的鉴权
鉴权服务也定义为service通过dns为其他service所调用。
四,用户权限缓存
用户权限数据存储在mysql中,为提升访问速度,也可以考虑把用户权限缓存在redis中。
领取专属 10元无门槛券
私享最新 技术干货