前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Token验证

Token验证

作者头像
陈琛
发布2020-06-12 16:09:30
2.1K0
发布2020-06-12 16:09:30
举报
文章被收录于专栏:陈琛的Redis文章

前言

这一晃一个月不更文了,是不是小可爱们已经忘了我啊。这段时间工作任务繁重,再加上自己有学习其他知识,所以这段时间荒废了。至于是啥,之后你们就知道了,毕竟不学习,如何更文呢(其实是装B,低调低调)。但是,但是,但是(重要的事情说三遍),我胡汉三又回来了,虽然我也不知道为什么是胡汉三,哈哈哈。

唠嗑结束了,我们得来学习新知识,今天写的是如何解决登录问题及token验证。

常见的登录问题

举个例子,我们平时通过账号和密码去登录百度账号的时候,是可以浏览百度底下的所有子服务的,如百度知道,百度贴吧,百度翻译,百度文库,而不要再次登录我们的账号,让我们感觉他们是一个服务,但是他们是不同的服务。这就是单点登录。

再举个列子,我们在登录某个网站的时候,可以通过用户名密码已经登录成功了,但是等下次请求,我们要如何知道他是否已经登录成功,那就是还要验证一下。如果有多个请求,每个请求都要在正常操作前验证用户的合法性,肯定是存在问题的。这就是跨越取值的问题。

解决方案(Token)

流程

使用token验证来解决,那token验证是咋样的一个流程呢?具体如下:

1.用户在请求登录的时候,如果账号和密码正确,就会在后台生成一个token值,存储在redis中,并将这个token返回给前端,让前端存储在自己的cookie或local storage里面。

2.前端在发送每个每个请求的时候,都将token值放在header里面,带回到后台。

3.后台有一个默认的拦截器,在接收到前端的请求时,会先将前端的token值取出,并且和redis中的token值进行对比。如果正确,就进行下面真正的业务操作,如果不正确,就抛出异常,提示前端“用户未登录”。

注:如果用户手动点击退出,则去redis中删除该数据。下次必须登录才能进行相关操作。

token如何产生

下图是一个完整的token值,我们可以看到他有两个点号,也就是将一个长字符串分割为三份。

第一部分为头部,完整的头部包括两部分信息,一为声明类型,这里是jwt,二为声明的加密算法,jwt提供了六种加密算法,具体如下,我们一般使用HS256。

第二部分是我们的具体业务信息块,也就是我们想要这个token里面存的数据信息。

第三部分是签证,也就是将第一部分加密数据和第二部分加密数据连接,并采用加盐加密(也就是加入不确定的字符串,已达成足够安全的情况)。

这三部分组成一个token的字符串。

部分代码块

下图为第二部分,token中应该存入的业务信息。

下图为第一部分,token中采用的加密算法HS256,以及加盐的数据secret。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-03-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 学习Java的小姐姐 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
访问管理
访问管理(Cloud Access Management,CAM)可以帮助您安全、便捷地管理对腾讯云服务和资源的访问。您可以使用CAM创建子用户、用户组和角色,并通过策略控制其访问范围。CAM支持用户和角色SSO能力,您可以根据具体管理场景针对性设置企业内用户和腾讯云的互通能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档