`
m635674608
  • 浏览: 5029420 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

服务器session和jwt之争

    博客分类:
  • java
 
阅读更多

1. session

 

session 和cookie的目的相同,都是为了克服http协议无状态的缺陷,但完成的方法不同。session通过cookie,在客户端保存session id,而将用户的其他会话消息保存在服务端的session对象中,与此相对的,cookie需要将所有信息都保存在客户端。因此cookie存在着一定 的安全隐患,例如本地cookie中保存的用户名密码被破译,或cookie被其他网站收集(例如:1. appA主动设置域B cookie,让域B cookie获取;2. XSS,在appA上通过javascript获取document.cookie,并传递给自己的appB)。

2. jwt:

 

真正讲明白的一篇文章: https://scotch.io/tutorials/the-ins-and-outs-of-token-based-authentication

 

The Ins and Outs of Token Based Authentication

 

0. 

JSON Web Tokens (JWT) 用于用户验证

23 Oct 2015

jwt 不仅可用于验证用户还可用于 server 间通信验证

传统验证方式(目前大部分网站使用的方式):

现代网页应用验证用户时面临的困难

  1. app server 可能是分布式的, 有很多 server, 在一个 server 上登录了,
    其他的没登陆, 需要额外工具来解决这个问题(sticky sessions)

  2. app 使用 RESTfull api 来获取数据, RESTful api 的原则是 stateless, 但使用 session, 使用 session 和 cookies 会引入 state; 另外, 当 API server 与 app server
    可能是两个 server, 需要 允许 CORS(Cross-Origin Resource Sharing), 但是 cookies 只能在同一个 domain 中使用

  3. app 可能需要下游服务, 每个 server 都要处理 cookie(???)

解决办法: 使用 JWT 方式来验证用户

JWT 方案不使用 session 基于 token.
用户注册之后, 服务器生成一个 JWT token返回给浏览器, 浏览器向服务器请求
数据时将 JWT token 发给服务器, 服务器用 signature 中定义的方式解码
JWT 获取用户信息.

一个 JWT token包含3部分:
1. header: 告诉我们使用的算法和 token 类型
2. Payload: 必须使用 sub key 来指定用户 ID, 还可以包括其他信息
比如 email, username 等.
3. Signature: 用来保证 JWT 的真实性. 可以使用不同算法

 

1. 和Session方式存储id的差异

Session方式存储用户id的最大弊病在于要占用大量服务器内存,对于较大型应用而言可能还要保存许多的状态。一般而言,大型应用还需要借助一些KV数据库和一系列缓存机制来实现Session的存储。

而 JWT方式将用户状态分散到了客户端中,可以明显减轻服务端的内存压力。除了用户id之外,还可以存储其他的和用户相关的信息,例如该用户是否是管理员、 用户所在的分桶(见[《你所应该知道的A/B测试基础》一文](/2015/08/27/introduction-to-ab-testing/)等。

虽说JWT方式让服务器有一些计算压力(例如加密、编码和解码),但是这些压力相比磁盘I/O而言或许是半斤八两。具体是否采用,需要在不同场景下用数据说话。

 

2. http://blog.rainy.im/2015/06/10/react-jwt-pretty-good-practice/

 

 

区别(仔细揣摩)

##1.

 这么基础的问题,居然还是没人说到点子上,最关键的一点是: 
* Session的状态是存储在服务器端,客户端只有session id;而Token的状态是存储在客户端 

其它细枝末节的区别,全部是由这一点造成的。 


就没人想过为什么token-based的authentication需要一堆secret key来干嘛么? 
因为状态信息全部是放在客户端,为了避免被篡改,于是需要用密码学的方法来签名/加密。 

可以自己去这里玩玩JWT的Debugger: 
http://jwt.io/ 
一进去你就会注意到两点: 
1. Token解码后就包含所有登陆信息 
2. Token你随便改一位都会提示无效 

##2.

 

session 和 token 就是个词而已…… 广义来说一切维护用户状态的技术都是session,一切动态生成的服务端有能力鉴别真假而本身无涵义的字符串都是token 




更多的详见: 
http://www.slideshare.net/derekperkins/authentication-cookies-vs-jwts-and-why-youre-doing-it-wrong

分享到:
评论

相关推荐

    JWT相关知识及Cookie, Session,Token和JWT的区别总结.pdf

    JSON Web Token (JWT) 是一种身份验证和授权的开放...Cookie适合简单的Web应用,Session适用于需要服务器保持状态的场景,而JWT则在分布式系统和无状态认证中表现出色。理解它们之间的差异有助于选择合适的认证策略。

    jwt简单的介绍和了解

    2. **跨域支持**:因为JWT是JSON格式,它可以方便地在不同的应用和服务器之间传递,支持多种编程语言,如Java、JavaScript、Node.js和PHP等。 3. **安全性**:通过数字签名,JWT可以确保数据在传输过程中的完整性,...

    Cookie、Session、Token、JWT

    Cookie、Session、Token、JWT 是常用于身份验证和状态管理的概念和技术。它们在Web应用程序中起到关键的作用。 Cookie:Cookie 是服务器在客户端存储的小型数据文件。它通常用于在客户端存储用户的身份验证信息或...

    Cookie、Session、Token、JWT.xmind

    Cookie、Session、Token、JWT.xmind

    jwt在线解密网站,可用于jwt的解码

    JSON Web Token(JWT)是一种开放的标准(RFC 7519),定义了一种紧凑的、自包含的方式来安全地在各方之间传输信息作为一个JSON对象。...在设计系统时,应综合考虑使用session和JWT的优缺点,根据实际需求进行选择。

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

    JWT是一种轻量级的身份验证机制,它通过在客户端存储一个包含用户信息的令牌,每次请求时都将这个令牌发送到服务器进行验证。JWT由三部分组成:头部、载荷和签名,可以避免频繁地查询数据库,提高系统的响应速度。 ...

    JWT handbook JWT手册

    JWT技术涉及多个方面,如加密签名、加密算法、认证流程等,本文将详细介绍JWT相关的技术和应用。 一、JWT基础概念 1. JSON Web Token的定义 JSON Web Token是一种紧凑的、URL安全的方式,用于表示在各方之间以JSON...

    Spring Boot Security OAuth2 实现支持JWT令牌的授权服务器源码.zip

    JWT是一种轻量级的身份验证和授权机制,用于在客户端和服务器之间安全地传递信息。JWT包含三部分:头部(Header)、负载(Payload)和签名(Signature)。它通过在客户端和服务器之间传递经过加密的令牌,而不是传统...

    tp6整合jwt范例可二次开发做服务器后端

    总的来说,通过将JWT与ThinkPHP6框架结合,我们可以创建一个安全、高效且易于扩展的服务器后端,为各种应用场景提供可靠的认证和授权服务。这对于构建现代Web应用和服务尤其重要,因为它们需要确保数据的安全传输和...

    多台服务器之间共享session

    4. **基于JWT(JSON Web Tokens)的身份验证**:JWT是一种轻量级的身份认证机制,可以在客户端和服务器之间安全地传递信息。它将用户的认证信息编码为一个Token,这个Token可以在多台服务器之间共享,而无需直接存储...

    JWT学习笔记

    传统的Session认证方式是基于服务器端的Session来存储用户的信息,而JWT则是基于客户端的Token来存储用户的信息。JWT的优点是可以减少服务器端的负载,提高应用程序的扩展性和安全性。 JWT的认证流程 1. 用户登录...

    针对分布式或集群session同步问题,改用jwt的续期解决方案.docx

    在分布式或集群环境下,为了保持Session的一致性和减少服务器间的通信开销,采用JWT机制进行用户身份验证成为了一个理想的解决方案。具体需求包括: - **安全性**: 确保数据传输过程中的安全性。 - **便捷性**: ...

    Springboot整合Spring security+Oauth2+JWT搭建认证服务器,网关,微服务之间权限认证及授权

    3. **JWT令牌**:JWT是一种轻量级的身份验证机制,用于在客户端和服务器之间安全地传递信息。它包含三个部分:Header、Payload和Signature,其中Payload可以存储用户信息。JWT的优势在于,它不需要在服务器之间存储...

    asp.net中用到的JWT身份验证 JWT.dll 下载

    2. **生成JWT**:验证成功后,服务器会创建一个JWT,包含用户的标识和其他必要信息(如角色、权限等)。 3. **返回JWT**:服务器将JWT发送回客户端,通常存储在浏览器的本地存储或Cookie中。 4. **后续请求**:...

    JWT Token生成及验证

    JWT在身份验证和授权场景中广泛应用,尤其是在微服务架构和API安全中。 在C#中实现JWT Token的生成和验证,主要涉及到以下几个关键知识点: 1. **JWT结构**:每个JWT由三个部分组成,用`.`分隔,分别是Header...

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

    基于token的身份验证可以替代传统的cookie+session身份验证方法。 JWT由三个部分组成:header.payload.signature 以下示例以JWT官网为例 header部分: { alg: HS256, typ: JWT } 对应base64UrlEncode编码为:...

    springcloud整合oauth2和jwt

    而OAuth2和JWT(JSON Web Token)是两种广泛用于身份验证和授权的技术。本篇文章将深入探讨如何在Spring Cloud项目中整合OAuth2和JWT,以及与MyBatis的集成。 首先,OAuth2是一个开放标准,主要用于授权。它允许第...

    前端知识Cookie, Session,Token和JWT的发展及区别(一) 上章:主要介绍一下背景和Cookie

    【前端知识】Cookie, Session, Token和JWT是Web开发中用于管理用户状态和身份验证的重要概念。本篇文章主要探讨了Cookie的定义、特点、重要属性、优缺点、使用场景及其面临的问题。 1. 背景 Cookie的诞生源于HTTP...

    基于JWT实现SSO单点登录流程图解

    其原理是用户在认证服务器上完成认证,并获得一个授权码,然后应用服务器使用该授权码请求令牌,最后获得一个JWT,JWT中包含用户的认证信息。 二、实现单点登录 要实现单点登录,需要两个部分:认证服务(sso-...

    Cookie、Session和Token三者的区别及使用

    4. **服务器识别**: 服务器根据Session ID找到对应的Session数据。 **优势**: 相对于Cookie而言,Session更安全,因为Session数据存储在服务器端。 **局限性**: - 会消耗服务器资源,尤其是当大量用户同时在线时...

Global site tag (gtag.js) - Google Analytics