微服务网关中的jwt认证

一. JWT是什么

JSON Web Token(JWT)是目前最流行的跨域身份验证解决方案。简单说,OAuth 就是一种授权机制。数据的所有者告诉系统,同意授权第三方应用进入系统,获取这些数据。系统从而产生一个短期的进入令(token),用来代替密码,供第三方应用使用。。

传统的授权认证方式,需要持久化session数据,写入数据库或文件持久层等,且授权校验依赖于数据持久层。 这样的方式,对于结构维护成本大,实现单点登录较为复杂,且没有分布式架构,无法支持横向扩展,风险较大(如果持久层失败,整个认证体系都会挂掉)。

JWT则无须持久化会话数据,是以加密签名的方式实现了用户身份认证授权,很好的解决了跨域身份验证,分布式session共享、单点登录和横向扩展等问题。

二. JWT标准规范

JWT由三部分组成,即头部负载签名。Token格式为 token=头部+’.’+载荷+’.’+签名。

2.1 Header

用于说明签名的加密算法等,下面类型的json经过base64编码后得到JWT头部。

2.2 Payload

标准定义了7个字段,载荷json经过base64编码后得到JWT的载荷。

示例:

2.3 Signature

将头部和载荷用’.’号连接,再加上一串密钥,经过头部声明的加密算法加密后得到签名。

三. 核心代码简析

3.1 数据结构

3.2 生成Token

3.3 校验Token

四. 登录授权示例

handler/auth.go

handler/account.go

main.go

五. JWT 使用方式

客户端收到服务器返回的 JWT,可以储存在 Cookie 里面,也可以储存在 localStorage

此后,客户端每次与服务器通信,都要带上这个 JWT。你可以把它放在 Cookie 里面自动发送,但是这样不能跨域。所以更好的做法是放在HTTP请求的头信息Authorization字段里面(或放在POST 请求的数据体里面)。

Authorization: Bearer

六. JWT注意事项

  1. JWT默认不加密,但可以加密。生成原始令牌后,可以使用改令牌再次对其进行加密。
  2. JWT不仅可用于认证,还可用于信息交换。善用JWT有助于减少服务器请求数据库的次数。
  3. JWT的最大缺点是服务器不保存会话状态,一旦JWT签发,在有效期内将会一直有效。
  4. JWT的有效期不宜设置太长,认证信息,因此一旦信息泄露,任何人都可以获得令牌的所有权限。
  5. 为了减少JWT数据盗用和窃取的风险,JWT建议使用加密的HTTPS协议进行传输。

发表评论

电子邮件地址不会被公开。 必填项已用*标注