千家信息网

怎样使用JSON Web Token设计单点登录系统

发表于:2024-09-28 作者:千家信息网编辑
千家信息网最后更新 2024年09月28日,这期内容当中小编将会给大家带来有关八幅漫画理解使用JSON Web Token设计单点登录系统,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。用户认证所谓用户认证(A
千家信息网最后更新 2024年09月28日怎样使用JSON Web Token设计单点登录系统

这期内容当中小编将会给大家带来有关八幅漫画理解使用JSON Web Token设计单点登录系统,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

用户认证

所谓用户认证(Authentication),就是让用户登录,并且在接下来的一段时间内让用户访问网站时可以使用其账户,而不需要再次登录的机制。

小知识:可别把用户认证和用户授权(Authorization)搞混了。用户授权指的是规定并允许用户使用自己的权限,例如发布帖子、管理站点等。

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

接下来,应用和数据库核对用户名和密码。

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

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

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

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

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

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

应用根据用户请求进行响应。

和Session方式存储id的差异

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

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

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

单点登录

Session方式来存储用户id,一开始用户的Session只会存储在一台服务器上。对于有多个子域名的站点,每个子域名至少会对应一台不同的服务器,例如:

  • www.taobao.com

  • nv.taobao.com

  • nz.taobao.com

  • login.taobao.com

所以如果要实现在login.taobao.com登录后,在其他的子域名下依然可以取到Session,这要求我们在多台服务器上同步Session。

使用JWT的方式则没有这个问题的存在,因为用户的状态已经被传送到了客户端。因此,我们只需要将含有JWT的Cookie的domain设置为顶级域名即可,例如

1

Set-Cookie: jwt=lll.zzz.xxx; HttpOnly; max-age=980000; domain=.taobao.com

注意domain必须设置为一个点加顶级域名,即.taobao.com。这样,taobao.com和*.taobao.com就都可以接受到这个Cookie,并获取JWT了。

上述就是小编为大家分享的八幅漫画理解使用JSON Web Token设计单点登录系统了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。

用户 应用 服务 方式 服务器 登录 存储 数据 检查 单点 信息 内存 压力 域名 密码 就是 属性 数据库 状态 用户名 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 软件开发多轮面试如何应对 东软网络安全人事助理 华为服务器生产线在哪里 数据库无效的字符串 全球互联网网络安全问题分析 哈工程网络安全考试 上海游唐网络技术有限公司6 沈阳手机软件开发公司如何选择 tornado 数据库 梦幻西游怎么无法获得服务器列表 计算机网络技术专业厦门 门头沟区网络技术信息采购 网络安全技术分析人物形象 软件开发职业责任保险 sql数据库项目实战论文 医疗设备的软件开发公司排名 最强蜗牛怎么删除其他服务器角色 湖南链上无限网络技术 成都程序软件开发哪家可靠 网络安全法律法规手操报 软件开发规则大全 长岛管理系统软件开发公司有哪些 数据库 概念股 平凉市网络安全和信息化 网络安全女生的优点 静安区管理网络技术服务哪家好 服务器两张网卡配同一个段 磁盘阵列柜 服务器 app软件开发学习 远程访问数据库提示连接失败
0