`

理解:JWT

JWT 
阅读更多
什么是 JWT -- JSON WEB TOKEN

json web token是用来做什么的?

--------------------------------------------------------------------------

一、JWT 介绍


JSON web Token,简称JWT,本质是一个token,是一种紧凑的URL安全方法,用于在网络通信的双方之间传递。
一般放在HTTP的headers 参数里面的authorization里面,值的前面加Bearer关键字和空格。除此之外,也可以在url和request body中传递。(传递方式跟session一样)



引用

与 session 的比较:
session
用户下次请求的鉴别,通常而言session都是保存在内存中,而随着认证用户的增多,服务端的开销会明显增大。

如果认证的记录被保存在内存中的话,这意味着用户下次请求还必须要请求在这台服务器上,这样才能拿到授权的资源,这样在分布式的应用上,相应的限制了负载均衡器的能力。


引用

JWT
JWT 是 session 的复杂实现(本来保存在 session 中的(非敏感)数据,保存到 JWT 中了)。
Session 只会传递一个 sessionid,
而 JWT 可以传递所有可能的信息,写在body里。

它不需要在服务端去保留用户的认证信息或者会话信息。这就意味着基于token认证机制的应用不需要去考虑用户在哪一台服务器登录了,这就为应用的扩展提供了便利。(本来保存在内存中的数据,统统写到 JWT 中,用以跨域传递)。

这个token必须要在每次请求时传递给服务端,它应该保存在请求头里, 另外,服务端要支持CORS(跨来源资源共享)策略,一般我们在服务端这么做就可以了Access-Control-Allow-Origin: *


JWT是基于 cookie/session 认证的替代品。



二、JWT 是如何加密,解密的?

JWT由三部分组成。依顺序用点号(".")链接而成:1.header,2.payload,3.signature。

例如: aaaa.bbbbbb.cccc

header里面说明类型和使用的算法 (明文加密)

{
  "alg": "HS256",   // 加密算法
  "typ": "JWT"        // token类型
}

payload是一组claim的值 (用来存放真正有效数据的地方)(明文加密)

signature 就是用点号将header和payload联系起来后,加上秘钥,
然后用header里面指定的加密方法进行加密后的字符串。

signature 生成方程式:

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret)

其中,只有服务器端才有 secret,这样就能保证只有服务器端才会生成相同的签名。
这样就起到了验证的作用。

注意:
secret是保存在服务器端的,jwt的签发生成也是在服务器端的,secret就是用来进行jwt的签发和jwt的验证,所以,它就是你服务端的私钥,在任何场景都不应该流露出去。






三、OAuth2.0 与 JWT 的关系

OAuth2.0 是一种授权通信的协议(是凡协议,都有一定的流程和步骤:OAuth2.0 认证的流程),

OAuth2.0 在其认证流程中使用的 token ,就是 JWT 格式的。


授权和获取的流程如下:
引用


授权部分
1、
首先,服务器应用(下面简称“应用”)让用户通过Web表单将自己的用户名和密码发送到服务器的接口。
这一过程一般是一个HTTP POST请求。建议的方式是通过SSL加密的传输(https协议),从而避免敏感信息被嗅探。

2、
接下来,应用和数据库核对用户名和密码。
核对用户名和密码成功后,进行 OAuth2.0 过程验证。
最后应用将用户的id(图中的user_id)作为JWT Payload的一个属性,
将其与头部分别进行Base64编码拼接后签名,形成一个JWT。这里的JWT就是一个形同lll.zzz.xxx的字符串。

获取部分
3、
应用将JWT字符串作为该请求Cookie的一部分返回给用户。
注意,在这里必须使用HttpOnly属性来防止Cookie被JavaScript读取,从而避免跨站脚本攻击(XSS攻击)。

在Cookie失效或者被删除前,用户每次访问应用,应用都会接受到含有jwt的Cookie。
从而应用就可以将JWT从请求中提取出来。

4、
应用通过一系列任务检查JWT的有效性。
例如,检查签名是否正确;检查Token是否过期;检查Token的接收方是否是自己(可选)。

应用在确认JWT有效之后,JWT进行Base64解码(可能在上一步中已经完成),
然后在Payload中读取用户的id值,也就是user_id属性。这里用户的id为1025。

应用从数据库取到id为1025的用户的信息,加载到内存中,进行ORM之类的一系列底层逻辑初始化。














-
  • 大小: 252.1 KB
分享到:
评论

相关推荐

    JWT Token生成及验证

    JSON Web Token(JWT)是一种开放的标准(RFC 7519),定义了一种紧凑...综上所述,JWT Token在C#中的实现涉及对标准的理解、使用特定库以及理解安全最佳实践。正确使用JWT能为应用程序提供高效且安全的身份验证机制。

    JWTDemo:JWT演示应用程序

    总的来说,`JWTDemo`项目是一个实践JWT技术的实例,涵盖了JWT的生成、验证、使用以及相关的安全策略,对于理解JWT在实际应用中的工作原理和最佳实践非常有帮助。通过分析和运行这个项目,开发者可以更深入地了解JWT...

    前端开源库-passport-jwt

    **Passport-JWT:前端身份验证的基石** 在现代Web应用中,安全性是至关重要的,尤其是在前端开发中。`Passport-JWT` 是一个专为前端开发者设计的开源库,它利用了JSON Web Token(JWT)的技术来实现高效且安全的...

    lua-resty-jwt:JWT为伟大的Openresty

    标题"lua-resty-jwt:JWT为伟大的Openresty"表明了本文将探讨如何使用lua-resty-jwt库在Openresty(一个基于Nginx和Lua的高性能Web平台)中处理JSON Web Tokens (JWT)。JWT是一种安全的身份验证和授权机制,常用于...

    jwt-handbook.zip_JSON_JWT Handbook_jwt handbook_jwt hankbook_jw

    通过阅读JWT Handbook,开发者可以深入理解JWT的工作原理、应用场景以及如何在实际项目中安全有效地使用JWT。这份手册是一个宝贵的资源,可以帮助开发者提升他们在身份验证和授权领域的专业技能。

    Token生成技术_JWT.doc

    JSON Web Token (JWT) 是一种安全的跨...理解JWT的工作原理和组成部分对于开发安全、可扩展的应用至关重要。然而,正确使用JWT需要考虑其局限性,并结合其他机制(如Redis)以实现更完整的功能,如用户登出和撤销令牌。

    JWT C Library.zip

    JWT(JSON Web Token)是...在实际应用中,开发人员需要理解JWT的工作原理,结合JWT C Library提供的接口,实现身份验证、授权等功能,确保系统的安全性和可靠性。同时,了解如何正确处理和存储JWT的秘密,以防止泄露。

    thinkphp+jwt实现前后端分离

    本项目是基于Thinkphp6框架和JWT(Json Web Token)技术实现的前后端分离示例,旨在帮助开发者理解如何在实际项目中运用这两种技术。 **Thinkphp6** 是一个轻量级、高性能的PHP框架,具有良好的模块化设计,支持MVC...

    febs_shiro_jwt-master_java_;shiro;jwt_

    【标题】"febs_shiro_jwt-master_java_;shiro;jwt_" 指的是一款使用Java语言开发的后台管理系统,该系统集成了SpringBoot、Apache ...通过学习和理解这个项目,可以提升对SpringBoot、Shiro和JWT的综合运用能力。

    JWT令牌认证技术.zip

    JWT(JSON Web Token)令牌认证技术是一种现代的、基于JSON的开放标准(RFC 7519),用于在各方之间安全地传输信息作为 JSON ...通过理解JWT的原理和在SpringBoot中的实践,开发者可以构建更加安全和高效的认证系统。

    jwt-shiro-demo:jwt-shiro-demo

    这个项目旨在帮助开发者理解如何在实际应用中实现用户认证和授权,利用JWT进行无状态的身份验证。 JWT是一种轻量级的身份验证机制,用于在客户端和服务器之间安全地传递信息。它包含了一个签名,确保了令牌的完整性...

    jwt工具类,包含引入的包

    在实际使用这个工具类时,开发者需要了解JWT的基本原理,理解如何配置和调用工具类的方法,以及如何结合自己的业务逻辑来保护和验证用户的身份。同时,对于MD5的使用,也需要评估其安全风险并考虑是否需要替换为更...

    jwt-decode.js

    JWT(JSON Web Token)是一种轻量级的身份验证和授权机制,广泛应用于Web应用、API接口的安全认证。jwt-decode.js是一个...理解JWT的工作原理和jwt-decode.js的使用方法,对于构建安全的认证和授权系统至关重要。

    JWT(Json Web Token)Java实现jar

    使用jjwt库,可以通过以下步骤创建JWT: - 导入jjwt库到项目中。 - 创建一个密钥(secret key)。 - 构建JWT的头部和负载信息。 - 使用jjwt提供的方法,如`JwtBuilder`,结合密钥生成签名的JWT字符串。 7. ...

    angular4-auth:jwt auth与角度4

    **Angular 4身份验证与JWT令牌** Angular 4是一个强大的前端框架,用于构建单页应用程序(SPA)。在开发Web应用时,确保用户安全是至关重要的,这就...理解并正确实施JWT身份验证是现代Web应用开发中的关键技能之一。

    JWT帮助文档

    - 解析无安全措施的JWT: 可以通过工具或编程语言库提供的函数来解析JWT,获取其内容。 4. JSON Web签名(JWS): - 签名JWT的结构: JWS指定了Compact Serialization,即紧凑的序列化方法,使得JWT更小、更...

    JWTTest_netty.netcore_jwt_

    该项目旨在帮助开发者理解JWT的工作原理以及如何在服务器端与客户端之间使用JWT进行安全的身份验证和授权。 JWT是一种轻量级的身份认证和授权机制,它通过将用户信息编码为一个字符串(称为JWT),然后在客户端和...

    jwt-practice:JWT在Golang中的实践

    JWT(JSON Web Token)是一种开放的标准(RFC 7519),定义了一种紧凑的、自包含的方式来安全地在各方之间传输信息作为一个 JSON 对象。...理解JWT的原理和Golang中相关的库和方法,对于构建安全的Web服务至关重要。

    spring boot jwt demo

    **Spring Boot JWT Demo详解** ...通过阅读源码,你可以更深入地理解JWT在实际应用中的实现细节。这个Demo对于学习和理解Spring Boot和JWT的结合非常有帮助,也是开发自己的身份验证系统的一个良好起点。

Global site tag (gtag.js) - Google Analytics