小编给大家分享一下SpringCloud服务认证JWT怎么实现,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!
<强>,——JWT 强>
JWT (JSON Web标记),是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519)。该令牌被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景.JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该令牌也可直接被用于认证,也可被加密。
<强>——JWT与其它的区别强>
通常情况下,把API直接暴露出去是风险很大的,不说别的,直接被机器攻击就喝一壶的。那么一般来说,对API要划分出一定的权限级别,然后做一个用户的鉴权,依据鉴权结果给予用户开放对应的API。目前,比较主流的方案有几种:
<强> OAuth 强>
OAuth(开放授权)是一个开放的授权标准,允许用户让第三方应用访问该用户在某一服务上存储的私密的资源(如照片,视频),而无需将用户名和密码提供给第三方应用。
OAuth允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供者的数据。每一个令牌授权一个特定的第三方系统(例如,视频编辑网站)在特定的时段(例如,接下来的2小时内)内访问特定的资源(例如仅仅是某一相册中的视频)。这样,OAuth让用户可以授权第三方网站访问他们存储在另外服务提供者的某些特定信息,而非所有内容
<强>饼干/会话认证强>
饼干认证机制就是为一次请求认证在服务端创建一个会话对象,同时在客户端的浏览器端创建了一个饼干对象,通过客户端带上来饼干对象来与服务器端会话的对象匹配来实现状态管理的。默认的,当我们关闭浏览器的时候,饼干会被删除。但可以通过修改饼干的到期时间使饼干在一定时间内有效,基于会议方式认证势必会对服务器造成一定的压力(内存存储),不易于扩展(需要处理分布式会话),跨站请求伪造的攻击(CSRF)
——JWT的优点
1。相比于会话,它无需保存在服务器,不占用服务器内存开销。
2。无状态,可拓展性强:比如有3台机器(A, B, C)组成服务器集群,若会话存在机器上,会话只能保存在其中一台服务器,此时你便不能访问机器B, C,因为B, C上没有存放该会话,而使用令牌就能够验证用户请求合法性,并且我再加几台机器也没的事,所以可拓展性好就是这个意思。
3。前后端分离,支持跨域访问。
<强> - JWT的组成强>
{,“iss":“JWT Builder",, ,“iat":, 1416797419,, ,“exp":, 1448333419,, ,“aud":“www.battcn.com",,, ,“sub":“1837307557 @qq.com",, ,“GivenName":“Levin",, ,“Surname":“Levin",, ,“Email":“1837307557 @qq.com",, ,“Role": [,“ADMIN",,“MEMBER",), }
- <李>
,空间站:该JWT的签发者,是否使用是可选的;
李> <李>子:该JWT所面向的用户,是否使用是可选的;
李> <李>aud:接收该JWT的一方,是否使用是可选的;
李> <李>exp(到期):什么时候过期,这里是一个Unix时间戳,是否使用是可选的;
李> <李>iat(发布):在什么时候签发的Unix时(间),是否使用是可选的;
李> <李>nbf之前(不):如果当前时间在nbf里的时间之前,则标记不被接受,一般都会留一些余地,比如几分钟,,是否使用是可选的;
李>
一个JWT实际上就是一个字符串,它由三部分组成,头部,载荷,签名(上图依次排序)
JWT牌生成器:https://jwt。io/
- 认证
- 登陆认证
客户端发送 POST 请求到服务器,提交登录处理的Controller层
调用认证服务进行用户名密码认证,如果认证通过,返回完整的用户信息及对应权限信息
利用 JJWT 对用户、权限信息、秘钥构建Token
返回构建好的Token