安装完成后

1:首先通过composer举行设置

composer require tymon/jwt-auth

2:加多服务提供者

编辑 config/app.php,在 “providers” 添加:

‘TymonJWTAuthProvidersJWTAuthServiceProvider’,

3:添加 Facades

编辑 config/app.php,在 “alias” 添加:

‘JWTAuth’ => ‘TymonJWTAuthFacadesJWTAuth’,

‘JWTFactory’ => ‘TymonJWTAuthFacadesJWTFactory’,

4:发表配置文件:

php artisan vendor:publish
–provider=”TymonJWTAuthProvidersJWTAuthServiceProvider”

5:生成 secret key

: php artisan jwt:generate

安装完结后,实施 php artisan jwt:generate,会报错:

.Method TymonJWTAuthCommandsJWTGenerateCommand::handle() does not
exist

抽薪止沸办法,那些需求改过源码:

编辑 vendor/tymon/jwt-auth/src/Commands/JWTGenerateCommand.php,新增:

 /** * Compatiblity with Laravel >= 5.5*/ public function handle; }

假如未增添服务提供者,直接施行该命令,恐怕也会报错!

There are no commands defined in the “jwt” namespace

缓慢解决方法:

不畏地方的拉长服务提供者

secret – 秘钥

用来具名 token 的秘钥。作者将秘钥与 Laravel 的 APP_KEY
分开,以便开拓者能够单独地改革它们。

提供了二个 artisan 命令,为大家转移一个专擅秘钥。(php artisan
jwt:generate卡塔尔

ttl – token 生存时间

token 的卓有功用时间,以分钟为单位。提出尽量设置短点,尤其是当大家也使用
token 刷新机制。

refresh_ttl – refresh 生存时间

能够刷新 token 的卓有成效时间,以分钟为单位。举个例子,借使设置为
2周,那么只好在 2周 内,刷新对应的 token,不然将会抛出
TokenExpiredException 极度。假使超越了刷新的有效性时间,必需生成二个簇新的
token,那意味客商须求重新登录。

注:ttl 和 refresh_ttl,用于保险客户的登录状态

algo – hash 算法

用来签字 token 的算法,保留默许值就能够

user – 客商模型路线

应该针对大家项目标 User 类的命名空间路线

identifier – 客户标记

从 token 的主旨注明中,根据什么标记来搜寻顾客

required_claims

那些注明必得存在于 token 的 payload 中,不然将抛出 TokenInvalidException
分外(会检验 token 的 payload 是不是存在这里些注脚卡塔尔国

blacklist_enabled

就算设置为 false,将不能够使 token
失效。即便我们照例可以刷新令牌,不过以前的令牌依旧有效,由此那样做十分不安全。但对于特别轻巧的落到实处,或许无需十一分的支出,我们能够配备它。

jwt-auth
包已经有局地现实贯彻,可用来落到实处种种须要。只要据守相关接口,大家就能够覆盖那一个实际完结。

providers.user

点名基于大旨注明,来搜寻客商的落到实处。

providers.jwt

姣好 token 的编码和平解决码的坚苦工作

providers.auth

因而凭证或 id 来申明客户

providers.storage

用以驱动黑名单,并积累 token 直到过期。

jwt-auth 包为我们提供了创设 token
的有余办法。有简要的方法,纵然您想越来越好的决定,也会有更进一层的法子。

开箱即用,有多数必需的宣示,即使那些都得以布置:

sub – 包罗 token 的标记符

iat – token 揭橥时间

exp – token 过期日期

nbf – 能够应用 token 的最初时间点

iss – token 发布者

jti – token 的天下无敌标志符

aud – token 的指标受众

也同意自定义申明。稍后会介绍。

创办一个依据客户凭证的 token

创建 token
的最常用方法是,通过顾客的记名凭证,来注明客户。借使证实成功,则赶回三个与该客商相关的
token。比方,假如大家有叁个 Laravel AuthenticateController

use JWTAuth;use TymonJWTAuthExceptionsJWTException; class AuthenticateController extends Controller{ public function authenticate { // grab credentials from the request $credentials = $request->only; try { // attempt to verify the credentials and create a token for the user if (! $token = JWTAuth::attempt { return response()->json(['error' => 'invalid_credentials'], 401); } } catch  { // something went wrong whilst attempting to encode the token return response()->json(['error' => 'could_not_create_token'], 500); } // all good so return the token return response()->json; }}

始建一个依据顾客对象的 token

小编们可以跳过客户认证,只传递叁个客商对象

$user = User::first();$token = JWTAuth::fromUser;

上边的 2 个法子也可能有第三个参数,能够传递叁个 ‘自定义注脚’ 的数组

在解码 token 时,那一个自定义注明,将和任何声美素佳儿(Karicare卡塔尔(قطر‎起提供。

留意:增加多量的自定义评释,将扩大 token 的轻重

创办八个基于随机你欢悦的剧情的 token

小编给大家提供了对底层类和办法的访谈,来提供高档的、可自定义的成效。

演示使用了内建的 ‘TymonJWTAuthPayloadFactory’ 实例:

$customClaims = ['foo' => 'bar', 'baz' => 'bob'];$payload = JWTFactory::make;$token = JWTAuth::encode;

也得以在 ‘TymonJWTAuthPayloadFactory’ 实例上链式调用评释:

$payload = JWTFactory::sub->foo;$token = JWTAuth::encode;

认证

若是客商使用他们的凭证登入,下一步将选拔 token
发起三个持续乞求,来查找顾客实际情况,以便大家能够将其出示为已报到。

选取内置方法,通过 http 发起认证央浼,我们须要设置二个 Authorization
诉求头,如下所示:

Authorization: Bearer {yourtokenhere}

Apache 顾客需求注意:

Apache 好像会废弃 Authorization 乞求头,若是该央求头不是 base64 编码的
user/pass 组合。为了减轻此难点,大家得以在 apache
配置文件中增多一下内容:

 RewriteEngine On RewriteCond %{HTTP:Authorization} ^ RewriteRule .* - [e=HTTP_AUTHORIZATION:%1]

抑或,大家能够透过在查询字符串中含有 token 来贯彻:

http://api.mysite.com/me?token={yourtokenhere}

为了从号令中获得 token,大家能够:

// 会设置 token 到返回的对象中JWTAuth::parseToken();// 接着,我们可以继续链式调用方法$user = JWTAuth::parseToken;

为了获取 token 的值,大家得以调用:

$token = JWTAuth::getToken();

假定设置了贰个 token,则会回来
token,不然,它将利用上述措施,尝试从号召中深入分析 token,如果未有设置
token 或 未有 token 能够被深入分析,最后回到 false。

理所必然,假设在大家的前后相继中有别的入口点,我们也足以借助供给手动设置
token。举个例子:

JWTAuth::setToken;

从 token 中寻觅认证过的客户

public function getAuthenticatedUser() { try { if(! $user = JWTAuth::parseToken{ return response()->json('user_not_found', 404); } } catch (TymonJWTAuthExceptionsTokenExpiredException $e) { return response()->json(['token_expired'], $e->getStatusCode; } catch (TymonJWTAuthExceptionsTokenInvalidException $e) { return response()->json(['token_invalid'], $e->getStatusCode; } catch (TymonJWTAuthExceptionsJWTException $e) { return response()->json(['token_absent'], $e->getStatusCode; } return response()->json; }

要是不希罕内联捕获两个拾壹分的点子,我们能够自由使用 Laravel
增多全局拾叁分管理程序。

在 app/Exceptions/Handler.php 中,将下边代码增添到 render(卡塔尔(قطر‎ 方法:

 public function render($request, Exception $e) { if ($e instanceof TymonJWTAuthExceptionsTokenExpiredException) { return response()->json(['token_expired'], $e->getStatusCode; } else if ($e instanceof TymonJWTAuthExceptionsTokenInvalidException) { return response()->json(['token_invalid'], $e->getStatusCode; } return parent::render; }

中间件和过滤器

若果大家采取的是 Laravel 5,能够行使内置的 2 当中间件:

GetUserFromToken

反省央浼头和询问字符串是或不是留存 token,并尝试解码
token。如上所述,相近的平地风波被触发。

RefreshToken

在那之中间件将重新尝试从倡议中分析 token,然后将刷新
token,并将其当做下三次响应的少年老成部分再次回到。那实际上发生了单个使用 token
流,就算 token 被外泄,这种办法会回退攻击,因为它仅对单个要求有效。

为了采用那 2 当中间件,大家要求将它们注册到 app/Http/Kernel.php 里的
$routeMIddleware 属性:

 protected $routeMiddleware = [ ... 'jwt.auth' => 'TymonJWTAuthMiddlewareGetUserFromToken', 'jwt.refresh' => 'TymonJWTAuthMiddlewareRefreshToken', ];

如上那篇laravel5.5安装jwt-auth
生成token令牌的亲自去做正是小编分享给大家的全体内容了,希望能给我们一个参阅,也指望大家多多指教脚本之家。

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website