微服务下的权限控制

发布 : 2018-11-03 分类 : 后端 浏览 :

一、用户认证

原理:OAuth2.0+JWT

OAuth2.0

一种授权框架

OAuth2.0包含四个角色:

  • 资源拥有者(Resource Owner)
  • 资源服务器(Resource Server)
  • 授权服务器(Authorization Server)
  • 客户端(Client)

OAuth2.0包含四种授权模式:

  • 授权码(认证码)模式 (Authorization code)
  • 简化(隐形)模式 (Impilict
  • 用户名密码模式 (Resource Owner Password Credential)
  • 客户端模式 (Client Credential)

缺点:所有访问微服务资源的请求都在Http Header中携带Token,被访问的服务再去请求授权服务器验证Token的有效性,所有的Token有效性校验都落在的授权服务器上,授权服务器存在瓶颈,这时候就需要引入JWT了。

JWT

一种认证协议

授权服务器将用户信息和授权范围序列化后放入一个JSON字符串,然后使用Base64进行编码,最终在授权服务器用私钥对这个字符串进行签名,得到一个JSON Web Token。

假设其他所有的资源服务器都将持有一个RSA公钥,资源服务器从Http Header中拿到Token,并验证它是否使用正确的私钥签名(也就是验签)。验签通过,反序列化后就拿到Toekn中包含的有效验证信息,这样就可以很好地完成服务化后的用户认证。

二、用户权限

基础概念:RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联。简单地说,一个用户拥有若干角色,每一个角色拥有若干权限。

把服务的所有api接口都定义为资源,资源拥有资源编码和资源URI。

在前端只需要检验该资源编码的有无就可以控制按钮的显示和隐藏,而在后端我们只需要统一拦截判断当前用户是否具有URI和对应请求方式即可。

权限的统一拦截是放置在Zuul这个网关上实现。

三、总结

Spring Cloud Security就结合了OAuth2.0,引入JWT优化token校验

实例地址:online-exam

本文作者 : tangyi
原文链接 : http://ehedgehog.com/2018/11/03/微服务下的权限控制/
版权声明 : 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!

知识 & 情怀 | 二者兼得

支付宝扫一扫, 向我投食

支付宝扫一扫, 向我投食

留下足迹