Laravel 通过生成的令牌进行身份验证,无需护照和 jwt

Posted

技术标签:

【中文标题】Laravel 通过生成的令牌进行身份验证,无需护照和 jwt【英文标题】:Laravel auth by generated token without passport and jwt 【发布时间】:2018-05-28 10:12:09 【问题描述】:

我正在尝试通过在 laravel 5.5 中使用 md5 加密方法从登录用户的用户名中检查生成的令牌来执行 api-auth,并且不想将令牌保存到用户表中。当用户注销时,令牌将无效。 URL 将是这样的:

http://myserver.com/products?token=......

我该怎么做?

添加 - 这是第 44 届世界技能大赛的测试项目,以下来自测试项目文档:

    身份验证

一个。登录(v1/auth/login)

说明:客户端通过用户名和密码获取登录令牌

请求方式:POST

Header:header授权基础

请求的参数:

正文:

o 用户名

密码

响应结果:

如果成功,

o 标头:响应状态:200

身体:

 token`:授权令牌(在注销前有效)。令牌将由系统从登录的用户名使用 md5 加密方法生成

 角色(管理员/用户)

如果用户名/密码不正确或为空,

o 标头:响应状态:401

o 正文:消息:无效登录

b.注销 (v1/auth/logout?token=AUTHORIZATION_TOKEN)

说明:服务器使用户令牌无效

请求方法:GET

Header:header授权基础

响应结果:

如果成功,

o 标头:响应状态:200

身体:

消息:注销成功

如果未经授权的用户访问它,

数据:

o 消息:未经授权的用户

o 响应状态:401

    地点

一个。所有地点 (v1/place?token=AUTHORIZATION_TOKEN)

描述:供客户端列出数据库中的所有位置(包括用户的 基于频率索引的搜索历史)

请求方法:GET

Header:header授权基础

响应结果:

正文:

o 数组中的所有数据;由 id、name、latitude、longitude、x、y、image_path、description 组成。

o 响应状态:200

如果未经授权的用户访问它,

数据:

o 消息:未经授权的用户

o 响应状态:401

...

【问题讨论】:

md5 不是一种加密方法,这听起来非常不安全。 这只是第44届世界技能大赛的测试项目......不是真的。 我真的很想在伪代码中知道您要做什么...如果没有保存任何内容,您如何登录...您需要在 DB 中有一个令牌才能将其与用户用于登录的用户进行比较...您能更好地解释一下吗? 感谢lewis4u,用户将通过restful api登录,如果成功客户端将获取在服务器端生成的令牌并将其保存在客户端。用户注销后,令牌将失效。我认为必须在服务器端使用会话对象来存储令牌,或者? 【参考方案1】:

您可以创建自己的中间件,并在该中间件中为用户指定角色并使用您自己的令牌创建,或者您可以将 jwt 与它一起使用,jwt 更适合取消保存数据库中的令牌

【讨论】:

【参考方案2】:

该项目只是为了竞争-我解决了以下问题:

    用户通过向服务器发送用户名和密码登录;

    如果成功,服务器将用户名的md5代码保存到会话中,并将代码返回给客户端;

    客户端将md5代码作为token保存到本地存储,后续请求会发送给服务器;

    服务器验证令牌以决定客户端是否可以访问其资源。

就是这样!只为竞争,不为生产。

【讨论】:

【参考方案3】:

您可以创建令牌 api 并为其提供 cron 作业或会话,除此之外,您可以进行重置,而无需像 jwt 那样将其保存到数据库中,但您可以手动处理它并进行操作

【讨论】:

以上是关于Laravel 通过生成的令牌进行身份验证,无需护照和 jwt的主要内容,如果未能解决你的问题,请参考以下文章

通过 laravel API 使用 firebase 令牌身份验证

Laravel OAuth2 Passport API,生成令牌但无法发出请求:“未经身份验证”

Laravel 4 使用令牌进行身份验证

Laravel - 通过外部 API 进行身份验证

Laravel - 使用会话令牌进行身份验证

Laravel Passport API:检索经过身份验证的令牌