前言:
现在朋友们对“php密钥生成”可能比较注重,姐妹们都想要了解一些“php密钥生成”的相关文章。那么小编也在网络上搜集了一些有关“php密钥生成””的相关知识,希望我们能喜欢,朋友们一起来学习一下吧!1:首先通过composer进行安装
composerrequiretymon/jwt-auth
2:添加服务提供者
编辑config/app.php,在"providers"添加:
'Tymon\JWTAuth\Providers\JWTAuthServiceProvider',
3:添加Facades
编辑config/app.php,在"alias"添加:
'JWTAuth'=>'Tymon\JWTAuth\Facades\JWTAuth',
'JWTFactory'=>'Tymon\JWTAuth\Facades\JWTFactory',
4:发布配置文件:
phpartisanvendor:publish--provider="Tymon\JWTAuth\Providers\JWTAuthServiceProvider"
5:生成secretkey
:phpartisanjwt:generate
安装完成后,执行phpartisanjwt:generate,会报错:
(1).MethodTymon\JWTAuth\Commands\JWTGenerateCommand::handle()doesnotexist
解决方法,这个需要修改源码:
编辑vendor/tymon/jwt-auth/src/Commands/JWTGenerateCommand.php,新增:
(2)如果未添加服务提供者,直接执行该命令,可能也会报错!
Therearenocommandsdefinedinthe"jwt"namespace
解决方法:
就是上面的添加服务提供者
配置(Configuration)
secret(secretkey)-秘钥
用来签名token的秘钥。作者将秘钥与Laravel的APP_KEY分开,以便开发者可以独立地修改它们。
提供了一个artisan命令,为我们生成一个随机秘钥。(phpartisanjwt:generate)
ttl(tokentimetolive)-token生存时间
token的有效时间,以分钟为单位。建议尽可能设置短点,尤其是当我们也使用token刷新机制。
refresh_ttl(refreshtimetolive)-refresh生存时间
可以刷新token的有效时间,以分钟为单位。例如,如果设置为2周,那么只能在2周内,刷新对应的token,否则将会抛出TokenExpiredException异常。如果超过了刷新的有效时间,必须生成一个全新的token,这意味着用户需要重新登录。
注:ttl和refresh_ttl,用于保持用户的登录状态
algo(hashingalgorithm)-hash算法
用于签名token的算法,保留默认值即可
user(usermodelpath)-用户模型路径
应该指向我们项目的User类的命名空间路径
identifier(useridentifier)-用户标识
从token的主题声明中,根据什么标识来检索用户(一般是id)
required_claims(requiredclaims)
这些声明必须存在于token的payload中,否则将抛出TokenInvalidException异常(会检测token的payload是否存在这些声明)
blacklist_enabled(blacklistenabled)
如果设置为false,将无法使token失效。虽然我们仍然可以刷新令牌,但是之前的令牌仍旧有效,因此这样做非常不安全。但对于非常简单的实现,可能不需要额外的开销(刷新token等),我们可以配置它。
providers
jwt-auth包已经有一些具体实现,可用来实现各种需求。只要遵循相关接口,我们就可以覆盖这些具体实现。
providers.user
指定基于主题声明,来查找用户的实现。
providers.jwt
完成token的编码和解码的繁重工作
providers.auth
通过凭证或id来认证用户
providers.storage
用于驱动黑名单,并存储token直到过期。
创建tokens(CreatingTokens)
jwt-auth包为我们提供了创建token的多种方法。有简单的方法,如果你想更好的控制,也有更进一步的方法。
开箱即用(outofbox),有许多必须的声明,虽然这些都可以配置:
sub(Subject)-包含token的标识符(默认是用户ID)
iat(IssuedAt)-token发布时间(unix时间戳)
exp(Expiry)-token过期日期(unix时间戳)
nbf(NotBefore)-可以使用token的最早时间点(unix时间戳)
iss(Issuer)-token发布者(默认为请求的url)
jti(JWTId)-token的唯一标识符(sub和iat声明的md5值)
aud(Audience)-token的目标受众(默认不需要)
也允许自定义声明。稍后会介绍。
创建一个基于用户凭证的token
创建token的最常用方法是,通过用户的登录凭证,来认证用户。如果认证成功,则返回一个与该用户相关的token。例如,假设我们有一个LaravelAuthenticateController
创建一个基于用户对象的token
我们可以跳过用户认证,只传递一个用户对象
上面的2个方法也有第二个参数,可以传递一个'自定义声明'的数组
在解码token时,这些自定义声明,将和其他声明一起提供。
注意:添加大量的自定义声明,将增加token的大小
创建一个基于任意你喜欢的内容的token
作者给我们提供了对底层类和方法的访问,来提供高级的、可自定义的功能。
示例使用了内建的'Tymon\JWTAuth\PayloadFactory'实例(或者使用JWTFactory门面):
也可以在'Tymon\JWTAuth\PayloadFactory'实例上链式调用声明(或者使用JWTFactory门面):
认证(Authentication)
一旦用户使用他们的凭证登录,下一步将使用token发起一个后续请求,来检索用户详情,以便我们可以将其显示为已登录。
使用内置方法,通过http发起认证请求,我们需要设置一个Authorization请求头,如下所示:
Apache用户需要注意:
Apache好像会丢弃Authorization请求头,如果该请求头不是base64编码的user/pass组合。为了解决此问题,我们可以在apache配置文件中添加一下内容:
或者,我们可以通过在查询字符串中包含token来实现:
为了从请求中获取token,我们可以:
为了获取token的值,我们可以调用:
如果设置了一个token,则会返回token,否则(为方便起见),它将使用上述方法,尝试从请求中解析token,如果没有设置token或没有token可以被解析,最终返回false。
当然,如果在我们的程序中有其他入口点,我们也可以根据需要手动设置token。例如:
从token中检索认证过的用户
如果不喜欢内联捕获多个异常的方法,我们可以随意使用Laravel添加全局异常处理程序。
在app/Exceptions/Handler.php中,将下面代码添加到render()方法:
中间件和过滤器
如果我们使用的是Laravel5,可以使用内置的2个中间件:
GetUserFromToken
检查请求头和查询字符串(正如上面解释过的)是否存在token,并尝试解码token。如上所述,同样的事件被触发。
RefreshToken
此中间件将再次尝试从请求中解析token,然后将刷新token(从而使旧token失效),并将其作为下一次响应的一部分返回。这实际上产生了单个使用token流,如果token被泄露,这种方式会减少攻击,因为它仅对单个请求有效。
为了使用这2个中间件,我们需要将它们注册到app/Http/Kernel.php里的$routeMIddleware属性:
以上这篇laravel5.5安装jwt-auth生成token令牌的示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持小编。
标签: #php密钥生成