共计 1537 个字符,预计需要花费 4 分钟才能阅读完成。
把待接入的第三方利用看作前端零碎,把本人的平台看作后端系统。
在后端系统注册第三方利用
在后端利用 blog
中注册对应的第三方利用 testapp
,在 blog
我的项目根目录下运行以下命令来注册 testapp
:
php artisan passport:client
>
> testapp
> http://app.test/auth/callback
# 显示后果
CLIENT_ID=9
CLIENT_SECRET=Xde5hsAbpEU8MMjwELFh6RNOzxX2LsrxgFTZvXkP
编写第三方利用路由和控制器
第一步是到后端系统申请受权,如果用户在后端系统没有登录须要先登录,登录之后让用户确认受权,受权之后通过 callback
配置的跳转地址回跳到前端利用,并且在 URL 中带上受权码,而后用户再通过这个受权码获取拜访令牌,拿到拜访令牌之后就能够申请后端系统认证 API 接口了。
所以,须要在前端利用的 routes/web.php
中新增两个路由:
- 一个用于申请受权获取受权码
- 一个用于从后端利用跳转回来,通过受权码在回跳的路由中发动后端申请获取令牌
Route::get('/auth', 'Auth\LoginController@oauth');
Route::get('/auth/callback', 'Auth\LoginController@callback');
public function oauth()
{
$query = http_build_query([
'client_id' => 9,
'redirect_uri' => 'http://app.test/auth/callback',
'response_type' => 'code',
'scope' => '',
]);
return redirect('http://blog.test/oauth/authorize?' . $query);
}
public function callback(Request $request)
{$code = $request->get('code');
if (!$code) {dd('受权失败');
}
$http = new Client();
$response = $http->post('http://blog.test/oauth/token', [
'form_params' => [
'grant_type' => 'authorization_code',
'client_id' => 9, // your client id
'client_secret' => "Xde5hsAbpEU8MMjwELFh6RNOzxX2LsrxgFTZvXkP", // your client secret
'redirect_uri' => 'http://app.test/auth/callback',
'code' => $code,
],
]);
return response($response->getBody());
}
测试通过受权码获取令牌
在浏览器中拜访 http://app.test/auth
,在第三方利用中通过后端系统进行受权认证,如果在后端利用 blog.test
上还没有登录,会先跳转到登录页面,登录之后则跳转到确认受权页面。
点击绿色的受权按钮,就能够跳转到第三方利用的回调路由,而后发动获取令牌的申请获取拜访令牌。
下次从第三方利用 app.test
中拜访后端系统 API 接口时,就能够通过在申请头中带上 access_token
来获取 blog.test
上的认证资源了,对应的逻辑和通过明码获取令牌拜访是一样的。
通过 Postman 进行测试,将 access_token
值拷贝到 Token 字段,而后就能够发动对认证 API 接口 http://blog.test/api/user
的申请了。
正文完