SpringCloud进阶-基于JWT的微服务鉴权方案

文章内索引
[显示]

在选型时调研了oauth2、oauth、JWT、shiro。

oauth

image 第1张

oauth2

OAuth2中包含四个角色:

· 资源拥有者(Resource Owner)

· 资源服务器(Resource Server)

· 授权服务器(Authorization Server)

· 客户端(Client)

OAuth2包含4种授权模式

· 授权码(认证码)模式 (Authorization code)

· 简化(隐形)模式 (Impilict

· 用户名密码模式 (Resource Owner Password Credential)

· 客户端模式 (Client Credential)

其中,OAuth2的运行流程如下图,摘自RFC 6749:

image 第2张

shiro

Shiro不会去维护用户、维护权限,这些需要我们自己去设计/提供,然后通过相应的接口注入给Shiro

image 第3张

在概念层,Shiro 架构包含三个主要的理念:Subject,SecurityManager和 Realm。下面的图展示了这些组件如何相互作用。

image 第4张

jwt

image 第5张

最终选用了JWT这种轻量级的协议,

优点是无状态,不需要频繁访问鉴权中心,造成过多短链,浪费资源,

缺点是token一旦派发无法收回,只能等待过期。

具体实现逻辑如下

image 第6张

拦截位置

1.可以通过filter与inteceptor进行拦截,缺点是每次请求都需要阻塞判断。

2.通过zuul网关统一鉴权,缺点穿透网管后,服务非安全。

3.通过feign inteceptor统一鉴权

用户填入用户名密码后,与数据库里存储的用户信息进行比对,如果通过,则认证成功。传统的方法是在认证通过后,创建sesstion,并给客户端返回cookie。现在我们采用JWT来处理用户名密码的认证。区别在于,认证通过后,服务器生成一个token,将token返回给客户端,客户端以后的所有请求都需要在http头中指定该token。服务器接收的请求后,会对token的合法性进行验证。验证的内容包括:

内容是一个正确的JWT格式

检查签名

检查claims

检查权限


©版权声明:本文为【翰林小院】(huhanlin.com)原创文章,转载时请注明出处!

评论

  1. 匿名说道:

    可以

发表评论

电子邮件地址不会被公开。