还在直接用JWT做鉴权JJWT真香

北京中科白癜风爱心公益 http://www.jydxy.com/

jwt是什么?

JWTs是JSON对象的编码表示。JSON对象由零或多个名称/值对组成,其中名称为字符串,值为任意JSON值。JWT有助于在clear(例如在URL中)发送这样的信息,可以被信任为不可读(即加密的)、不可修改的(即签名)和URL-safe(即Base64编码的)。

jwt的组成

Header:标题包含了令牌的元数据,并且在最小包含签名和/或加密算法的类型Claims:Claims包含您想要签署的任何信息JSONWebSignature(JWS):在header中指定的使用该算法的数字签名和声明

例如:

Header:{"alg":"HS","typ":"JWT"}Claims:{"sub":"","name":"","admin":true}Signature:base64UrlEncode(Header)+"."+base64UrlEncode(Claims),

加密生成的token:

如何保证JWT安全

有很多库可以帮助您创建和验证JWT,但是当使用JWT时,仍然可以做一些事情来限制您的安全风险。在您信任JWT中的任何信息之前,请始终验证签名。这应该是给定的。

换句话说,如果您正在传递一个秘密签名密钥到验证签名的方法,并且签名算法被设置为“none”,那么它应该失败验证。

确保签名的秘密签名,用于计算和验证签名。秘密签名密钥只能由发行者和消费者访问,不能在这两方之外访问。

不要在JWT中包含任何敏感数据。这些令牌通常是用来防止操作(未加密)的,因此索赔中的数据可以很容易地解码和读取。

如果您担心重播攻击,包括一个nonce(jti索赔)、过期时间(exp索赔)和创建时间(iat索赔)。这些在JWT规范中定义得很好。

jwt的框架:JJWT

JJWT是一个提供端到端的JWT创建和验证的Java库。永远免费和开源(ApacheLicense,版本2.0),JJWT很容易使用和理解。它被设计成一个以建筑为中心的流畅界面,隐藏了它的大部分复杂性。

JJWT的目标是最容易使用和理解用于在JVM上创建和验证JSONWeb令牌(JWTs)的库。JJWT是基于JWT、JWS、JWE、JWK和JWARFC规范的Java实现。JJWT还添加了一些不属于规范的便利扩展,比如JWT压缩和索赔强制。

规范兼容:

创建和解析明文压缩JWTs创建、解析和验证所有标准JWS算法的数字签名紧凑JWTs(又称JWSs):HS:HMACusingSHA-HS:HMACusingSHA-HS:HMACusingSHA-RS:RSASSA-PKCS-v1_5usingSHA-RS:RSASSA-PKCS-v1_5usingSHA-RS:RSASSA-PKCS-v1_5usingSHA-PS:RSASSA-PSSusingSHA-andMGF1withSHA-PS:RSASSA-PSSusingSHA-andMGF1withSHA-PS:RSASSA-PSSusingSHA-andMGF1withSHA-ES:ECDSAusingP-andSHA-ES:ECDSAusingP-andSHA-ES:ECDSAusingP-andSHA-

这里以github上的demo演示,理解原理,集成到自己项目中即可。

应用采用springboot+angular+jwt

结构图

Maven引进:pom.xml

groupId


转载请注明:http://www.aierlanlan.com/rzfs/5578.html

  • 上一篇文章:
  •   
  • 下一篇文章: