Laravel API jwt token 的问题

请教各位,我使用了composer require tymon/jwt-auth 1.0.0-rc.1 ,我看了大量的教程,都使用了 User.php 的模型,进行验证用户的,如果我不用laravel 的 auth 验证体系,我如何自己生成token?

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 17

生成一个用户$user之后
使用JWT Auth的JWTAuth::fromUser($user)来生成该用户的token

1周前 评论
lyxxxh

每个user表加个token字段
用户登录成功之后:修改用户token为随机字符串 返回这个随机字符串给前端
前端每次发送请求带上token 每次都查询这个token是那个用户的

1周前 评论
随风飘流的男人

这种无状态的token,很容易被人盗用的,加https貌似也没有啥用!!欢迎讨论!!

1周前 评论
lyxxxh

@随风飘流的男人

token盗用的话 我只想到前端
网络的传输盗用 难道他跑到别人家监听网络不成

前端的话 都是localStorage保存token
黑客localStorage.getItem获取到token ajax发送到他们服务器
但是cookie不也是不安全(存在本地的)?
我想不到 哪里不安全

1周前 评论
随风飘流的男人: cookie确实是不安全的,不过tb就是用cookie保存用户登陆信息的,因为session在高并发的条件下太占内存,我的意思是你每次同token不管你get还是post访问路由的时候,人家就可以直接获取到你的token了吧!! 1周前
lyxxxh: @随风飘流的男人 听不懂 我每次发送get post都把token放到header 他们怎么获取到呢 ;浏览器不也是把cookie发送过去; 我意思是token不安全;session不也是不安全 (毕竟session是用cookie存在客户端的 但是为什么token就不安全) 1周前
largezhou: @随风飘流的男人 加了 HTTPS 就获取不到了啊,,,只能看到你访问的域名,,连 path 都看不到,,,你本地装个抓包软件不装证书试下,,, 1周前
随风飘流的男人: @largezhou 我之前用ajax貌似可以看到 1周前
tradzero: @随风飘流的男人 你自己当然看得到。 你试试用其他网络抓包试试。 5天前
woku5420: https + cookie http only ,定时刷新token,这样是不是更安全点? 5天前
lyxxxh

file
这是我获取用户身份的代码

1周前 评论

@mirrorpen $user 是一个数组吧,里面应该是存储用户的一些验证过密码后的信息吧,比如 存放userid , 和 username 等,不知道我理解的对不?

1周前 评论

@mirrorpen @lyxxxh @随风飘流的男人 等于token是否安全,我也比较迷茫,看了很多文章,其实也没把我在安全层级的担忧打消,可能我是菜鸟吧。
我的需求是 前端后端完全分离,所以我需要laravel提供API接口,然后前端有很多端,手机端,H5端,PC端,ipad端。我需要鉴权。所以想到用token。也欢迎各位能给我一个正确的思路!谢谢!

1周前 评论
mirrorpen: 我跟我同事是这样做的比较简单,后端生成token返回给前端,前端把token存浏览器cookie里,每次请求接口时的时候在头部带上这个token。设定一个token有效时间,到这个时间了用户就要重新获取token 5天前

@lyxxxh 我是专门在一个 tokeninfo 表里,存储我需要公钥和私钥,第一次登录,登录验证成功,我将公钥发给前端,然后前端使用 localstroage 保存,然后每次请求,携带这个公钥。来调用接口,接口进行鉴权,如果OK ,就返回数据,如果不OK 就不返回数据。
不知道这样的思路对不?

1周前 评论
1 draven: 你可以,过一段时间就去生成一个新的token返回给前端,然后把原先的token废弃掉,这样我觉得会更安全一点 1周前
lyxxxh

@andyzu
对的 我跟你的差不多
file
中间件查询这个token是谁的 查询到合并到$request对象 查询不到,没有这个token就返回失败

1周前 评论

可以尝试查看一下源码,这个 SDK 生成 token 的方法有好几种。

5天前 评论
  • User model 实现 Tymon\JWTAuth\Contracts\JWTSubject 接口

  • 修改 config/api.php

    'auth' => [
     'jwt' => 'Dingo\Api\Auth\Providers\JWT',
    ],
  • login 生成用户 token

    $token = Auth::guard('api')->attempt(['username' => $request->username, 'password' => $request->password]);
5天前 评论
andyzu: 如果我不用 User model 我如何自己生成? 3天前

@Liuzhipeng_laravel 这个是认证,我需要的是鉴权。

4天前 评论

绑定需要认证的模型

   'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'api' => [
            'driver' => 'jwt',
            'provider' => 'users',
        ],

        'admin' => [
            'driver' => 'jwt',
            'provider' => 'admins',
        ],
    ],
3天前 评论

如果我不需要laravel 的认证,而是我自己手动认证。应该怎么做?@summer-1994

2天前 评论

@andyzu 那你完全不需要用tymon/jwt-auth这个包,这个包核心是实现了laravel的Guard接口,把需要验证的模型主键id按一定的规则生成对应的token。你可以自己写一套加密token的规则,然后在中间件解密认证。 0.0 你非要用包生成token然后再自己验证,你可以在中间件 用 JWTAuth::parseToken()->getPayload()->get('sub') 获取加密模型的主键id,然后按需求验证

2天前 评论

@summer-1994 感谢你!我明白了!

2天前 评论

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!

社区文档:

将托管在 packagist.org 和 github.com 的扩展包使用国内 CDN 加速
GitHub Laravel 扩展包 TOP 250
速查表方便快速查询框架功能,支持手机访问,支持中英文版本
Laravel 中文文档,由社区用户翻译和维护,将会保持一直更新
此文档的目的,就是为了提高技术团队的凝聚力、一致性和生产效率。
开发环境的部署,开发者工具的选择,适用于 Mac 和 Windows。
浓缩过后的精华
Laravel Nova 后台管理面板文档的中文翻译
Lumen 中文文档,由社区用户翻译和维护,将会保持一直更新
Laravel 下知名扩展包 Dingo API 的中文文档,Laravel API 开发必知必会