基于PHP怎么实现JWT登录鉴权


本文小编为大家详细介绍“基于PHP怎么实现JWT登录鉴权”,内容详细,步骤清晰,细节处理妥当,希望这篇“基于PHP怎么实现JWT登录鉴权”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。JWT(JSON Web Token)是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准。简单的说,JWT就是一种Token的编码算法,服务器端负责根据一个密码和算法生成Token,然后发给客户端,客户端只负责后面每次请求都在HTTP header里面带上这个Token,服务器负责验证这个Token是不是合法的,有没有过期等,并可以解析出subject和claim里面的数据。第一部分为头部(header),第二部分我们称其为载荷(payload),第三部分是签证(signature)。【中间用 . 分隔】一个标准的JWT生成的token格式如下:eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiIsImp0aSI6IjRmMWcyM2ExMmFhMTEifQ.eyJpc3MiOiJodHRwOlwvXC9leGFtcGxlLmNvbSIsImF1ZCI6Imh0dHA6XC9cL2V4YW1wbGUub3JnIiwianRpIjoiNGYxZzIzYTEyYWExMSIsImlhdCI6MTY0MDE3MTA1MywibmJmIjoxNjQwMTcxMDU0LCJleHAiOjE2NDAxNzQ2NTMsInVpZCI6MjAsInVzZXJuYW1lIjoiTWFrZSJ9.bysUwNIyhqqEyL0JecSHdplSTfE6G6zuCsrAn6eyrQM使用https://jwt.io/这个网站对JWT Token进行解析的结果如下验证流程:① 在头部信息中声明加密算法和常量, 然后把header使用json转化为字符串② 在载荷中声明用户信息,同时还有一些其他的内容;再次使用json 把载荷部分进行转化,转化为字符串③ 使用在header中声明的加密算法和每个项目随机生成的secret来进行加密, 把第一步分字符串和第二部分的字符串进行加密, 生成新的字符串。词字符串是独一无二的。④ 解密的时候,只要客户端带着JWT来发起请求,服务端就直接使用secret进行解密。特点:① 三部分组成,每一部分都进行字符串的转化② 解密的时候没有使用数据库,仅仅使用的是secret进行解密③ JWT的secret千万不能泄密!④ 不依赖数据库,而是直接根据token取出保存的用户信息,以及对token可用性校验,校验方式更加简单便捷化,单点登录更为简单。JWT Token需要持久化在redis、Memcached中吗?不应该这样做,无状态的jwt变成了有状态了,背离了JWT通过算法验证的初心。在退出登录时怎样实现JWT Token失效呢?退出登录, 只要客户端端把Token丢弃就可以了,服务器端不需要废弃Token。怎样保持客户端长时间保持登录状态?服务器端提供刷新Token的接口, 客户端负责按一定的逻辑刷新服务器Token。签发token, 设置签发人、接收人、唯一标识、签发时间、立即生效、过期时间、用户id、用户username、签名。其中,用户id、用户username是特意存储在token中的信息,也可以增加一些其他信息,这样在解析的时候就可以直接获取到这些信息,不能是敏感数据验证令牌验证这个Token是不是合法的,有没有过期等,并可以解析出subject和claim里面的数据,传递jwt token的方式为Authorization中的Bearer Token,如下读到这里,这篇“基于PHP怎么实现JWT登录鉴权”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注百云主免费云主机域名机行业资讯频道。

相关推荐: Vuex中this.$store.commit()和this.$store.dispatch()区别是什么

这篇文章主要讲解了“Vuex中this.$store.commit()和this.$store.dispatch()区别是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Vuex中this.$store.co…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 04/18 20:48
下一篇 04/18 20:48

相关推荐