美文网首页
如何用JWT解决即时通讯开发中Socket长连接的身份认证

如何用JWT解决即时通讯开发中Socket长连接的身份认证

作者: 可爱的小云朵 | 来源:发表于2022-10-24 09:57 被阅读0次

JSON Web Token(简称JWT),是一个开放安全的行业标准,可以用于多个系统之间传递安全可靠的信息(也包括本文中将要用到的传递身份认证信息的场景)。

一个JWT的token字符串组成如下:

1)红色的为Header:指定token类型与签名类型;

2)紫色的为载荷(playload):存储用户id等关键信息;

3)蓝色的为签名:保证整个信息的完整性、可靠性(这个签名字符串,相当于是一段被加密了的密文文本,安全性就是由它来决定的)。

JWT的头部用于描述关于该JWT的最基本的信息,例如其类型以及签名所用的算法等。

这可以被表示成一个JSON对象:

{

"typ": "JWT",

"alg": "HS256"

}

▲ 在这个头信息里,标明了这是一个JWT字符串,并且所用的签名算法是HS256算法

在载荷(playload)中可以定义以下属性:

1)iss: 该JWT的签发者;

2)sub: 该JWT所面向的用户;

3)aud: 接收该JWT的一方;

4)exp(expires): 什么时候过期,这里是一个Unix时间戳;

5)iat(issued at): 在什么时候签发的。

上面的信息也可以用一个JSON对象来描述,将上面的JSON对象进行base64编码,可以得到下面的字符串。即时通讯聊天软件app开发可以加蔚可云的v:weikeyun24咨询

JWT的签名部分,在官方文档中是如下描述的:

HMACSHA256(

base64UrlEncode(header) + "." +

base64UrlEncode(payload),

secret)

上述伪码的意义,即如下操作:

eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiIyOWZmMDE5OGJlOGM0YzNlYTZlZTA4YjE1MGRhNTU0NC1XRUIiLCJleHAiOjE1MjI0OTE5MTV9

▲ 将上面的两个base64编码后的字符串都用句号‘.’连接在一起(头部在前),就形成了如下字符串

最后,我们将上面拼接完的字符串用HS256算法进行加密。在加密的时候,我们还需要提供一个密钥(secret)。

那么,按照RFC7519上描述的方法,就可以得到我们加密后的内容:

P-k-vIzxElzyzFbzR4tUxAAET8xT9EP49b7hpcPazd0

▲ 这个就是我们需要的JWT的签名部分了

生成JWT的token字符串的最后一步签名过程,实际上是对头部以及载荷内容进行加密。

一般而言:加密算法对于不同的输入产生的输出总是不一样的。所以,如果有人对头部以及载荷的内容解码之后进行修改,再进行编码的话,那么新的头部和载荷的签名和之前的签名就将是不一样的。而且,如果不知道服务器加密的时候用的密钥的话,得出来的签名也一定会是不一样的。

换句话说:你的JWT字符串的安全强度,基本上就是由这个签名部分来决定的。

使用时:服务器端在接受到JWT的token字符串后,会首先用开发者指明的secret(可以理解为密码)对头部和载荷的内容用同一算法再次签名。那么服务器应用是怎么知道我们用的是哪一种算法呢?别忘了,我们在JWT的头部中已经用alg字段指明了我们的加密算法了。

如果服务器端对头部和载荷再次以同样方法签名之后发现,自己计算出来的签名和接受到的签名不一样,那么就说明这个Token的内容被别人动过的,我们应该拒绝这个JWT Token,返回一个HTTP 401 Unauthorized响应。

JWT的整个技术原理,就是一个很典型的对称加密应用过程,通俗的说也就是用开发者在服务端保存的密码,对用户的id等信息进行加密并按照JWT的规则(见5.1节)组成字符串返回给用户。用户在使用时将这个字符串提交给对应的服务端,服务端取出JWT字串的头信息、载荷,用开发者指明的密码试着进行加密并得到一个字符串(即合法的JWT token),两相比较,相同则认为用户提交上来的JWT合法,否则不合法。这就是JWT的全部原理,相当简单易懂。

JWT技术的价值不在于具体的技术实现,而在于它的思想本身,尤其在异构系统、分布式系统方面,可以极大的简化安全认证的成本,包括简化架构复杂性、降低使用门槛等,因为JWT的技术原理决定了认证的过程不需要其它系统的参与,由当前实例自已就可以完成,而成认证代码极小(就是一个加密字符串的比较而已)。

当然,我们之所以选择JWT技术,主要看重的还是它简单易用,但或许正因为如此,某种程度上来说这也恰是居致它的缺点的原因所在。

JWT技术的缺点及建议的解决方法主要有:

1)JWT的最大缺点是服务器不保存会话状态,所以在使用期间不可能取消token或更改token的权限。也就是说,一旦JWT签发,在有效期内将会一直有效;

2)JWT本身包含认证信息(即你在第5.1节中看到的头信息、负载信息),因此一旦信息泄露,任何人都可以获得token的所有权限。为了减少盗用,JWT的有效期不宜设置太长。对于某些重要操作,用户在使用时应该每次都进行进行身份验证;

3)为了减少盗用和窃取,JWT不建议使用HTTP协议来传输代码,而是使用加密的HTTPS(SSL)协议进行传输。

相关文章

  • 用JWT技术解决IM系统Socket长连接的身份认证痛点

    本文引用了封宇《JWT技术解决IM系统的认证痛点》一文的部分内容,即时通讯网重新整理、增补和修订,感谢原作者的无私...

  • .NET Core5.0 JWT鉴权SSO单点登录

    JWT JWT全称“JSON Web Token”,是基于JSON的用户身份认证的令牌。可跨域身份认证,所以JWT...

  • JWT Authentication in Django

    Django中的JWT认证 本教程将介绍JSONWeb令牌(JWT)以及如何在Django中实现JWT身份验证。 ...

  • (二)即时通讯系列之TCP Socket

    即时通讯系列之Socket简介 一、Socket连接 1.连接过程 建立Socket连接至少需要一对套接字,其中一...

  • JWT简介

    前言 JSON Web Token(JWT)是目前最流行的跨域身份验证解决方案。微服务常见的认证方案 一、跨域认证...

  • jwt身份认证

    JWT(JSON Web Tokens) 是一个开放的标准(RFC 7519)定义的一种简洁的、自包含的方法,用于...

  • 虾皮二面后续:JWT 身份认证优缺点

    这篇文章,我们一起探讨一下 JWT 身份认证的优缺点以及常见问题的解决办法。 JWT 的优势 相比于 Sessio...

  • JWT

    JWT | 简介 全称:JSON Web Token; JWT 主要用于身份认证和信息加密; JWT 是一个简单而...

  • jwt相关介绍及使用

    JWT:JSON Web Token是目前最流行的跨域认证解决方案,用户身份的认证以前我们都是怎么做的呢,一般步骤...

  • 信任的传递——为什么我们需要第三方授权?

    在证书验证、基于JWT(Json Web Token)的身份认证、IDP(身份提供商)、SP(服务提供商)等技术中...

网友评论

      本文标题:如何用JWT解决即时通讯开发中Socket长连接的身份认证

      本文链接:https://www.haomeiwen.com/subject/yypnzrtx.html