PHP JWT初识及其简单示例
一直没有好好看过jwt,直到前两天要做web验证,朋友给我推荐了jwt。才发现jwt已经被大家广泛的应用了。看来我有点out了。哈哈,趁着这个世界来好好看看这个。 JWT(JSON Web Token),顾名思义就是可以在Web上传输的token,这种token是用JSON格式进行format的。它是一个开源标准(RFC 7519),定义了一个紧凑的自包含的方式在不同实体之间安全的用JSON格式传输信息。 由于现在很多项目都是前后端分离,restful api模式。所以传统的session模式就没有办法满足认证需求,这个时候jwt的作用就来了。可以说 restful api认证是jwt的一个很好的应用场景。 参数解释 名称 解释 iss (issuer) issuer 请求实体,可以是发起请求的用户的信息,也可是jwt的签发者 sub (Subject) 设置主题,类似于发邮件时的主题 aud (audience) 接收jwt的一方 exp (expire) token过期时间 nbf (not before) 当前时间在nbf设定时间之前,该token无法使用 iat (issued at) token创建时间 jti (JWT ID) 对当前token设置唯一标示 下面是一个很小的demo require_once 'src/JWT.php'; header('Content-type:application/json'); //定义Key const KEY = 'dasjdkashdwqe1213dsfsn;p'; $user = [ 'uid'=>'dadsa-12312-vsd1s1-fsds', 'account'=>'daisc', 'password'=>'123456' ]; $redis = redis(); $action = $_GET['action']; switch ($action) { case 'login': login(); break; case 'info': info(); break; } //登陆,写入验证token function login() { global $user; $account = $_GET['account']; $pwd = $_GET['password']; $res = []; if($account==$user['account']&&$pwd==$user['password']) { unset($user['password']); $time = time(); $token = [ 'iss'=>'http://test.cc',//签发者 'iat'=>$time, 'exp'=>$time+60, 'data'=>$user ]; $jwt = FirebaseJWTJWT::encode($token,KEY); $res['code'] = 200; $res['message'] = '登录成功'; $res['jwt'] = $jwt; } else { $res['message']= '用户名或密码错误'; $res['code'] = 401; } exit(json_encode($res)); } function info() { $jwt = $_SERVER['HTTP_AUTHORIZATION'] ?? false; $res['code'] = 200; if($jwt) { $jwt = str_replace('Bearer ','',$jwt); if(empty($jwt)) { $res['code'] = 401; $res['msg'] = 'You do not have permission to access.'; exit(json_encode($res)); } try{ $token = (array) FirebaseJWTJWT::decode($jwt,KEY,['HS256']); if($token['exp'] (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |