`

初识JWT(java web token)

    博客分类:
  • SSO
 
阅读更多
JWT(Json Web Token)是JSON风格轻量级的授权和身份认证规范,可实现无状态、分布式的Web应用授权。

个人理解
我认为它是分布式session的替代物,在没有jwt之前,我们可以用redis等缓存服务器来充当session存储服务器,用户根据cookic中的token到redis服务器取用户信息,这也是单点登录的一种设计方案。而JWT的出现,使成本更低,我们可以单独部署一台授权服务器,甚至把授权服务器和应用部署在同一台服务器,来验证用户信息并返回一个jwt,该jwt存储在用户端(可存储在cookic中)。当用户需要访问一个路径、资源时,在http请求的头部中添加Authorization:bearer <token>,token在登录认证后由服务器生成并返回,就可以访问该资源,这也使得跨域访问(到其他的服务器中获取资源)更方便,因为授权信息已经存在于http请求中了,而且该授权信息的数据量不大,也避免不同服务器不同cookic实现带来的阻碍。不同语言和平台,只要服务器端实现了jwt授权认证,用户的token就可以随时验证权限而后获取资源,同时也避免了为了验证用户信息而多次查询数据库。
JWT授权时序图

一个JWT由3个json部分组成,通过base64Url编码后用.符号来分隔,最终的JWT形式:xxxxx.yyyyy.zzzzz
header(头部)
{
  "alg":"HS256",  // 加密算法
  "typ":"JWT"  // 类型
}

payload(类似Http的body),可以包含多个claim(claim的key通常是由3个字符组成的,值通常是用户信息和另外的元数据)
claim分为3种:
预备的:JWT预先实现的,比如(iss (issuer), exp (expiration time), sub (subject), aud (audience))等;
公有的:定义包含namespace的uri,或者定义一些已经在IANA注册的claim;
私有的:定义多个应用约定好要共享的数据。
payload的例子
{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true
}

signature(签名,服务器认准此签名进行授权)
HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret)
上面就是一个签名,HMACSHA256是我们在header中指定的加密算法,对base64UrlEncode(header)、
base64UrlEncode(payload)和secret进行加密。用来验证请求发送者的身份和确保JWT中途没有被窜改。

一个完整的JWT


与session的主要区别
JWT把用户信息加密后存放在http的header中,可以不使用cookic,更加通用,跟restful配置更顺手,可以跨平台跨语言,比较适合分布式应用。但是对于规模较小的应用,比如单服务器应用,还是用session比较好,不用特意在服务器中实现JWT授权。

JWT的缺点
1.token的有效性太过依赖生成token时设置的过期时间,用户一旦拿到token就可以随时访问服务器,服务器对token不可控,只能等它失效;
2.只能与https配置使用,否则token会被窃取,他人就可以伪装成该token的持有者去各个服务器获取数据;
3.各个服务器都得实现JWT,才可以相互请求资源。
分享到:
评论

相关推荐

    JWT(java web Token)

    Java Web Token(JWT)是一种开放的标准(RFC 7519),定义了一种紧凑的、自包含的方式来安全地在各方之间传输信息作为一个JSON对象。这个信息可以被验证和信任,因为它是数字签名的。JWT在身份验证和授权场景中广泛...

    springSecurity-jwt:JWT access_token和refresh_token

    SpringSecurity-JWT-VERSION2(AccessToken和RefreshToken) version1太复杂,无法优化。accessToken refreshToken流安全登录处理流程详细说明转到博客文章JWT异常处理安全异常处理(AuthenticationEntryPoint,...

    php实现JWT(json web token)鉴权实例详解

    JWT是json web token缩写。它将用户信息加密到token里,服务器不保存任何用户信息。服务器通过使用保存的密钥验证token的正确性,只要正确即通过验证。基于token的身份验证可以替代传统的cookie+session身份验证方法...

    JWT Token生成及验证

    JSON Web Token(JWT)是一种开放的标准(RFC 7519),定义了一种紧凑的、自包含的方式来安全地在各方之间传输信息作为JSON对象。这种信息可以被验证和信任,因为它是数字签名的。JWT在身份验证和授权场景中广泛应用...

    JWT(json web token)包

    JWT(json web token)是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。 JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源。比如用在用户登录上...

    java开发jwt认证 令牌,jwt.jar包 jwt 实现token认证,支持jdk1.7版本 java令牌

    jwt.jar包 jwt所需jar包集合 使用commons-codec.jar + java-jwt.jar进行token认证,支持jdk1.7及以上版本,目前大多数jwt支持至少需要1.8及以上,资源不好找,且行且珍惜。 如果需要源码以及功能实现方式,请联系...

    JWT(Json Web Token)Java实现jar

    JSON Web Token(JWT)是一种广泛使用的轻量级身份验证和授权机制,主要应用于Web应用程序和服务之间的安全通信。JWT通过在客户端和服务器之间传递令牌来携带信息,这些信息经过签名,可以确保数据的完整性和不可...

    JWT格式的Token动态库封装,包括获取token,验证token,获取token中保存的内容

    JWT(JSON Web Token)是一种开放的标准(RFC 7519),定义了一种紧凑的、自包含的方式来安全地在各方之间传输信息作为一个JSON对象。这个信息可以被验证和信任,因为它是数字签名的。JWT在身份验证和授权场景中广泛...

    springboot整和jwt、shiro、redis实现token自动刷新

    结合JWT(JSON Web Token)和Shiro,我们可以构建一个高效的身份验证和授权系统,同时利用Redis缓存来提高性能和用户体验。下面将详细介绍如何在Spring Boot中整合JWT、Shiro和Redis实现Token自动刷新。 JWT是一种...

    JWT(json web token加密算法) for C# dll 文件,亲测可用

    JSON Web Token(JWT)是一种开放的标准(RFC 7519),定义了一种紧凑的、自包含的方式来安全地在各方之间传输信息作为一个JSON对象。这个信息可以被验证和信任,因为它是数字签名的。JWT可用于身份验证、授权,以及...

    JWT Token生成及验证(源码)

    JWT(JSON Web Tokens)是一种轻量级的身份验证和授权机制,广泛应用于Web应用程序和服务之间的安全通信。这个"JWT Token生成及验证(源码)"的压缩包文件可能包含了一个示例项目,用于演示如何生成和验证JWT令牌。让...

    JWT(Java Web Token)的介绍.doc

    初学者、面试求职者

    JWT-JSON Web Token實作分享1

    JSON Web Token(JWT)是一种基于 token 的身份验证机制,它可以提供一种无状态、可扩展、安全的身份验证方式。下面将详细介绍 JWT 的实现和使用。 为什么需要 Web Token? 在服务器端身份验证中,传统的基于...

    jwt-demo token实战

    JWT(JSON Web Token)是一种开放的标准(RFC 7519),定义了一种紧凑的、自包含的方式来安全地在各方之间传输信息作为一个 JSON 对象。这个信息可以被验证和信任,因为它是数字签名的。JWT 可用于认证和授权,是...

    jave token 认证(JWT)

    Java Token 认证,特别是JSON Web Token (JWT),在现代Web应用中被广泛用于身份验证和授权。JWT是一种轻量级的身份验证标准,允许服务端为客户端生成一个令牌,这个令牌包含了用户的相关信息,且是经过签名的,可以...

    JWT 生成Token实战验证

    **JWT (JSON Web Tokens) 生成Token实战验证** 在现代Web应用中,安全认证和授权是至关重要的。JWT(JSON Web Token)作为一种轻量级的身份验证机制,被广泛应用于API和单页应用(SPA)。JWT允许用户在客户端存储...

    JWT 生成Token及验证

    JWT(JSON Web Token)是一种开放标准(RFC 7519),用于在各方之间以一种紧凑且自包含的方式安全地传输信息。这种信息可以被验证和信任,因为它可以使用数字签名进行签名。它通常用于Web应用的身份验证和信息交换。...

    jwt_token_test.zip

    Java Web Token(JWT)是一种轻量级的身份验证和授权机制,广泛应用于移动应用与服务器之间的交互。JWT允许在用户身份验证后将权限信息安全地编码为一个字符串,并在客户端和服务端之间传递,无需存储session信息在...

    Webapi_JWT_Authentication-master_webapi_jwt_token_

    WebAPI与JWT(JSON Web Tokens)身份验证是一种常见的安全机制,用于保护WebAPI接口免受未经授权的访问。JWT令牌提供了一种轻量级的方式来进行身份验证和授权,它允许服务器在客户端之间安全地传递信息,而无需存储...

Global site tag (gtag.js) - Google Analytics