私人访问令牌这种授权方式比较特殊,不需要授权码,也不需要用户输入登录凭证,而是用户给自己颁发访问令牌。这种授权方式在用户测试、体验平台提供的认证 API 接口时非常方便,比如微信开放平台和支付宝开发平台都有沙箱测试模式,在这种测试模式下获取授权令牌的方式其实就是通过私人访问令牌来实现的。
在后端系统注册测试应用
在开放平台 blog
中注册对应的测试应用 testapp
,在 blog
项目根目录下运行以下命令来注册 testapp
:
php artisan passport:client --personal
> testapp
# 显示结果
CLIENT_ID=14
CLIENT_SECRET=HImtGXC1CdG2LvhUpdp3y81IjuyrP0rLUPP8gisg
获取访问令牌
修改模型类:
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
接口,就可以获取到当前认证用户的信息了。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。