[ Laravel 从入门到精通 ] 用户认证与授权系列 —— 通过 Passport 实现 API 请求认证:沙箱测试篇(私人访问令牌)

还有一种获取访问令牌的方式叫做私人访问令牌。这种授权方式比较特殊,不需要授权码,也不需要用户输入登录凭证,而是用户给自己颁发访问令牌。这种授权方式在用户测试、体验平台提供的认证 API 接口时非常方便,比如微信开放平台和支付宝开发平台都有沙箱测试模式,在这种测试模式下获取授权令牌的方式其实就是通过私人访问令牌来实现的。

下面我们就来简单演示下如何使用私人访问令牌获取令牌访问认证 API。还是将后端应用 blog 类比做开放平台,然后我们在这个开发平台上通过的测试应用体验系统提供的认证 API。这个时候,测试应用不需要分离出来,也没法分离出来。

在后端系统注册测试应用

我们在 blog 项目根目录下通过如下 Artisan 命令注册一个测试应用,还是将其命名为 testapp

php artisan passport:client --personal

这样,我们就模拟创建了一个测试应用 testapp,该应用记录存放在 oauth_clients 数据表中。

获取访问令牌

既然是用户自己给自己颁发访问令牌,那就需要用到模型类了,我们以 User 模型类存储的用户为例进行演示。首先在该模型类中使用 HasApiTokens Trait(已经使用的话跳过此步骤):

...
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Laravel\Passport\HasApiTokens;

class User extends Authenticatable
{
    use HasApiTokens, Notifiable;

    ...

然后我们在 routes/web.php 中定义一个新的路由,用于测试获取访问令牌:

Route::get('auth/personal', 'Auth\LoginController@personal'); 

接下来,在控制器 LoginController 编写对应的方法 personal

public function personal()
{
    $user = User::where('name', '学院君')->first();
    $token = $user->createToken('Users')->accessToken;
    dd($token);
}

这样,我们访问 http://blog.test/auth/personal 就可以获取到该用户的访问令牌了。生成的令牌记录可以在 oauth_access_tokens 数据表中找到,私人访问令牌默认是长期有效的。

拿到这个令牌之后我们就可以通过它访问认证接口了。

访问认证接口

还是以 Postman 为例,我们把上面获取到的令牌拷贝到 Bearer Token 头里面,访问 blog.test/api/user 接口,就可以获取到当前认证用户的信息了:

依次类推,你还可以访问开放平台其它需要认证的 API 接口。

学院君 has written 1198 articles

Laravel学院院长,终身学习者

积分:157887 等级:P12 职业:手艺人 城市:杭州

0 条回复

登录后才能进行评论,立即登录?