Laravel 通过 Passport 实现 API 请求认证:开放平台篇(客户端凭证令牌)

Posted 小伍

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Laravel 通过 Passport 实现 API 请求认证:开放平台篇(客户端凭证令牌)相关的知识,希望对你有一定的参考价值。

客户端凭证令牌的授权方式不需要走典型的登录或授权重定向流程,适用于后端与后端应用之间的接口认证,类似做微信、支付宝开放平台开发,需要先申请自己的应用,申请通过后,这些开放平台会给开发者分配对应的 APP ID 和 APP SECRET。然后开发者通过这个 APP ID 和 APP SECRET 去开放平台获取 Token(令牌),最后拿着这个令牌去访问认证资源即可。客户端凭证令牌也是这个思路。

以测试项目 testapp 作为客户端应用,把后端项目 blog 作为类似微信、支付宝的开放平台。

在开放平台注册客户端应用

在开放平台 blog 中注册对应的客户端应用 testapp,在 blog 项目根目录下运行以下命令来注册 testapp

php artisan passport:client
> 
> testapp
> http://app.test/auth/callback

# 显示结果
CLIENT_ID=11
CLIENT_SECRET=XKmtGXC1CdG2LvhUpdp3y81IjuyrP0rLUPPq8reg

在客户端应用中定义路由和控制器

在客户端应用中定义获取令牌的路由,在 routes/web.php 新增下面行代码:

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

然后在 LoginController 控制器中编写对应的 client 方法:

public function client()
{
    $http = new Client();
    $response = $http->post(\'http://blog.test/oauth/token\', [
        \'form_params\' => [
            \'grant_type\' => \'client_credentials\',
            \'client_id\' => 11,  // your client id
            \'client_secret\' => \'XKmtGXC1CdG2LvhUpdp3y81IjuyrP0rLUPPq8reg\',   // your client secret
            \'scope\' => \'*\'
        ],
    ]);

    return response($response->getBody());
}

测试客户端应用访问开放平台认证接口

在浏览器中访问 http://app.test/auth/client,就可以获取到访问令牌了。

客户端访问令牌默认长期有效,所以没有返回用于刷新令牌的 refresh_token 字段。

可以通过将返回的 access_token 值添加到 Bearer Authentication 请求头中,来访问开放平台 blog 中需要认证的 API 接口了。

在后端应用的 routes/api.php 中新增一个测试路由:

Route::middleware(\'client\')->get(\'/test\', function (Request $request) {
    return \'欢迎访问后端应用!\';
});

在这个路由中应用了 client 中间件,表示该路由需要通过客户端凭证访问令牌进行认证才能访问。

接下来,在 app/Http/Kernel.php$routeMiddleware 属性中定义这个中间件:

\'client\' => \\Laravel\\Passport\\Http\\Middleware\\CheckClientCredentials::class,

在 Postman 中测试这个 API 接口的访问,将上述 /auth/client 请求返回的 access_token 值添加到 Bearer Token 请求头中,就可以获取到对应的接口返回数据了。

以上是关于Laravel 通过 Passport 实现 API 请求认证:开放平台篇(客户端凭证令牌)的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 通过 Passport 实现 API 请求认证:基于 Cookie 的同域名应用篇

每天一点点之laravel框架 - Laravel5.6 + Passport实现Api接口认证

Laravel 通过 Passport 实现 API 请求认证:沙箱测试篇(私人访问令牌)

Laravel 通过 Passport 实现 API 请求认证:移动端应用篇(密码授权令牌)

Laravel 5.4建站06--API 认证系统 Passport

Laravel 通过 Passport 实现 API 请求认证:开放平台篇(客户端凭证令牌)