lumen5.5 鉴权dusterio/lumen-passport 清疚 2022-04-13 07:19 190阅读 0赞 ### 文章目录 ### * * * 场景 * package 简介 * 安装 * 鉴权 * * * 鉴权 (password grant) * refresh token api ### 场景 ### * 同事那里接手了一个lumen5.5项目,鉴权做的一塌糊涂; 所以需要重构一下这一块;选用的解决方案是[dusterio/lumen-passport][dusterio_lumen-passport] ### package 简介 ### > [dusterio/lumen-passport][dusterio_lumen-passport] > > > Making Laravel Passport work with Lumen > > A simple service provider that makes Laravel Passport work with Lumen > > > 安装使用是很简单的, 但是这个牺牲了部分特性; 因为laravel-passport是基于web session的; 而lumen在5.2的时候已经废弃了session; `另外提一下这个package的readme.md是完全建立在读者对laravel-passport熟悉的基础上的; 文档极其简陋;需要对照`[laravel-passport][] ### 安装 ### * 安装 * composer require dusterio/lumen-passport * 配置 > 注册bootstrap/app.php > > > // Enable Facades > > $app->withFacades(); > > // Enable Eloquent > > $app->withEloquent(); > > // Enable auth middleware (shipped with Lumen) > > $app->routeMiddleware(\[ > > ‘auth’ => App\\Http\\Middleware\\Authenticate::class, > > \]); > > // Finally register two service providers - original one and Lumen adapter > > $app->register(Laravel\\Passport\\PassportServiceProvider::class); > > $app->register(Dusterio\\LumenPassport\\PassportServiceProvider::class); > > 注册oauth表 > > > Create new tables for Passport > > php artisan migrate > > Install encryption keys and other necessary stuff for Passport > > php artisan passport:install > > 配置config/auth.php > > > return \[ > > ‘defaults’ => \[ > > ‘guard’ => ‘api’, > > ‘passwords’ => ‘users’, > > \], > > ‘guards’ => \[ > > ‘api’ => \[ > > ‘driver’ => ‘passport’, > > ‘provider’ => ‘users’, > > \], > > \], > > ‘providers’ => \[ > > ‘users’ => \[ > > ‘driver’ => ‘eloquent’, > > ‘model’ => \\App\\User::class > > \] > > \] > > \]; ### 鉴权 ### ##### 鉴权 (password grant) ##### * 请求方式 * POST /oauth/token * 请求参数 <table> <thead> <tr> <th align="center">字段</th> <th align="center">是否必须</th> <th align="center">类型</th> <th align="center">描述</th> </tr> </thead> <tbody> <tr> <td align="center">grant_type</td> <td align="center">Y</td> <td align="center">string</td> <td align="center">目前只支持password</td> </tr> <tr> <td align="center">client_id</td> <td align="center">Y</td> <td align="center">integer</td> <td align="center">client ID</td> </tr> <tr> <td align="center">client_secret</td> <td align="center">Y</td> <td align="center">string</td> <td align="center">client secret</td> </tr> <tr> <td align="center">username</td> <td align="center">Y</td> <td align="center">string</td> <td align="center">product key, product表的product_key</td> </tr> <tr> <td align="center">password</td> <td align="center">Y</td> <td align="center">string</td> <td align="center">password 默认nicework</td> </tr> <tr> <td align="center">scope</td> <td align="center">N</td> <td align="center">string</td> <td align="center">所有的权限的时候 *</td> </tr> </tbody> </table> * 分析 * `所以重点是怎么获取username, password? 因为鉴权Model 很多时候不是User; 或者没有username, password字段` * 解决 * User Model 添加 protected $table = ‘product’; 切换table * findForPassport 方法执行username 指向的唯一字符串 * 认证密码字段,可以使用函数 getAuthPassword 指定; (这个函数返回选中model的字段值; 下图就是表示使用table中的 user\_passwrod字段来做为密码 ) /** * 自定义关键字查询方式 * @param $username * @return mixed */ public function findForPassport($username) { return (new static())->where($this->password_search_key, $username)->first(); } /** * 设置用来认证的密码字段 * @return string */ public function getAuthPassword() : string { return $this->user_password; } ##### refresh token api ##### * 请求方式 * `POST/oauth/token/refresh` * 分析 * 这里有bug * `源码中可以看到: 使用到了$request->session()->token()但是session 已经废弃了` * `另外找时间研究一下; 好忙!` /** * Get a fresh transient token cookie for the authenticated user. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function refresh(Request $request) { return (new Response('Refreshed.'))->withCookie($this->cookieFactory->make( $request->user()->getKey(), $request->session()->token() )); } [dusterio_lumen-passport]: https://github.com/dusterio/lumen-passport [laravel-passport]: https://laravel.com/docs/5.5/passport
相关 接口鉴权 一、问题说明:接口如果是被同一个项目的前端项目调用,一般都是加了各种鉴权的,比如springsercurity+token安全机制,shiro 等框架都可以控 喜欢ヅ旅行/ 2023年02月12日 15:28/ 0 赞/ 25 阅读
相关 前端鉴权 前端鉴权 前端权限的控制从本质上来说,就是控制前端视图层的展示和前端所发送的请求 ,但是只有前端权限控制没有后端权限控制是万万不可的,前端权限只是达到一个锦上添花的效果 不念不忘少年蓝@/ 2022年12月21日 04:47/ 0 赞/ 256 阅读
相关 鉴权案例 项目背景 本项目为销售运营体系的中的一个子系统,系统中的权限分为两个部分 1、 ACL系统统一对人员进行行为鉴权 2、 数据层面 「爱情、让人受尽委屈。」/ 2022年10月01日 01:46/ 0 赞/ 18 阅读
相关 JWT鉴权 jwt是什么? JWTs是JSON对象的编码表示。JSON对象由零或多个名称/值对组成,其中名称为字符串,值为任意JSON值。JWT有助于在clear(例如在URL中)发 我不是女神ヾ/ 2022年09月11日 05:11/ 0 赞/ 280 阅读
相关 JWT认证 鉴权 写在前面 作为从业了十多年的IT行业和程序的老司机,今天如果你说你不懂微服务,都不好意思说自己的做软件的。SOA喊了多年,无人不知,但又有多少系统开发真正的 柔情只为你懂/ 2022年06月06日 06:07/ 0 赞/ 366 阅读
相关 JWT鉴权 涉及到3个微服务: geteway网关微服务、用户授权中心微服务、用户微服务; > 用户登录、请求进来, > ![3][] [3]: /images/202204 末蓝、/ 2022年04月10日 05:31/ 0 赞/ 581 阅读
相关 鉴权案例 项目背景 本项目为销售运营体系的中的一个子系统,系统中的权限分为两个部分 1、 ACL系统统一对人员进行行为鉴权 2、 数据层面 深碍√TFBOYSˉ_/ 2022年04月08日 09:44/ 0 赞/ 382 阅读
相关 动态鉴权原理 [2019独角兽企业重金招聘Python工程师标准>>> ][2019_Python_] ![hot3.png][] 开放的平台,需要对每个客户进行鉴权,一般会提供acces 怼烎@/ 2022年01月14日 01:17/ 0 赞/ 341 阅读
相关 spring cloud jwt用户鉴权及服务鉴权 用户鉴权 客户端请求服务时,根据提交的token获取用户信息,看是否有用户信息及用户信息是否正确 服务鉴权 微服务中,一般有多个服务,服务与服务之间相互调用时,有 旧城等待,/ 2021年10月26日 13:24/ 0 赞/ 499 阅读
还没有评论,来说两句吧...