关键词

JWT ThinkPHP Token 认证

ThinkPHP5实现JWT Token认证的简单过程

JWT(JSON Web Token)是一种基于JSON的开放标准(RFC 7519),它允许我们安全地将信息编码为一个字符串,在各个方之间传递该字符串,以便验证和信任该信息。它是一种跨域认证方式,可以很好地解决跨域请求的认证问题。本文将介绍如何使用ThinkPHP5来实现JWT Token认证。

1、安装JWT扩展包

使用composer安装JWT扩展包,在命令行中输入:

composer require firebase/php-jwt

2、配置JWT Token认证

在ThinkPHP5中,我们可以将JWT Token认证配置到指定的控制器中,或者配置到某个控制器的某个方法中,以实现更细粒度的控制。

3、编写获取Token的接口

编写一个接口,用于获取Token,在接口中,我们需要对用户的账号和密码进行校验,根据校验的结果,返回Token给客户端。

public function getToken(){
    // 接收用户的账号和密码
    $account = Request::param('account');
    $password = Request::param('password');
    // 校验用户的账号和密码
    $user = Db::table('user')->where('account', $account)->find();
    if($user){
        if($user['password'] == md5($password)){
            // 获取当前时间
            $time = time();
            // 设置Token的有效期
            $expire = $time + 7200;
            // 设置Token
            $token = [
                'iss' => 'http://www.example.com', //签发者
                'aud' => 'http://www.example.com', //jwt所面向的用户
                'iat' => $time, //签发时间
                'nbf' => $time, //在什么时间之后该jwt才可用
                'exp' => $expire, //过期时间-10min
                'data' => [
                    'user_id' => $user['id'],
                    'username' => $user['username']
                ]
            ];
            // 对Token进行加密
            $jwt = JWT::encode($token, 'secret');
            // 返回Token
            return json(['token' => $jwt]);
        }else{
            return json(['msg' => '账号或密码错误']);
        }
    }else{
        return json(['msg' => '账号不存在']);
    }
}

4、编写验证Token的中间件

编写一个中间件,用于验证Token,在每次请求的时候,都会先去验证Token是否有效,如果Token有效,则继续执行后续的操作,如果Token无效,则返回错误信息。

public function handle($request, \Closure $next)
{
    // 获取请求头中的token
    $token = Request::header('token');
    // 对token进行解密
    $decoded = JWT::decode($token, 'secret', array('HS256'));
    // 判断token是否过期
    if($decoded->exp < time()){
        return json(['msg' => 'token已过期']);
    }
    // 验证成功,继续执行
    return $next($request);
}

5、使用Token认证

在需要使用Token认证的接口中,我们可以在控制器或者控制器的某个方法中,使用中间件来进行Token的验证,以实现认证功能。

public function index(){
    return json(['msg' => '验证成功']);
}

本文介绍了如何使用ThinkPHP5实现JWT Token认证,以实现跨域认证的功能。我们需要安装JWT扩展包,配置JWT Token认证,编写获取Token的接口,编写验证Token的中间件,在需要使用Token认证的接口中,使用中间件来进行Token的验证,以实现认证功能。

本文链接:http://task.lmcjl.com/news/7153.html

展开阅读全文