compor require laravel/passport=~4.0
notes:
1)确保系统安装unzip、zip等命令。
2)compor 安装出现 authentication required (packagist.phpcompor.com) 问题,修改compor.json 中的源,repositories.packagist.url = https://packagist.laravel-china.org 。
在config/app.php的providers 数组中加入 laravel\passport\passportrviceprovider::class
php artisan migrate //生成用于存储客户端和令牌的数据表
php artisan passport:install
1、生成oauth-private.key(用于构建认证服务器),oauth-public.key(用于构建资源服务器)
2、oauth_clients数据库生成「个人访问」客户端和「密码授权]两条数据。
在model中,我们需要增加 hasapitokens class
在authrviceprovider中, 增加 “passport::routes()”
在 auth.php中, 更改 api 认证方式为passport
p共助在线观看韩剧网hp artisan passport:client
php artisan vendor:publish --tag=passport-components //发布 passport vue,组件位于resources/asts/js/components下
//注册到resources/asts/js/app.js 文件,记得要放在new vue上面
vue.component( 'passport-clients', require('./components/passport/clients.vue'));vue.component( 'passport-authorized-clients', require('./components/p肖邦简介assport/authorizedclients.vue'));vue.component( 'passport-personal-access-tokens', require('./components/passport/personalaccesstokens.vue'));
//编译前端资源
npm install陕西师范大学就业 //此处报错,移步larravel mix文档npm run dev
编译后资源放在public/js/app.js下
//组件放入应用模板(记得引入编译后的app.js)
<passport-clients></passport-clients><passport-authorized-clients></passport-authorized-clients><passport-personal-access-tokens></passport-personal-access-tokens>
以上认证服务器都已经搭建完成
回调地址 http://third.plat.goods/dew/sso
//获取授权码 code (第一次交互)
$query = http_build_query(array( 'client_id' => 3, 'redirect_uri' => 'http://third.plat.goods/dew/sso', //地址必须为上面的回调地址 'respon_type' => 'code', //固定值 'scope' => '', 'state' => urlencode('http://laravel.plat.goods/ur') //可以放用户访问的地址。));return redirect('http://laravel.plat.goods/oauth/authorize?'.$query); ///laravel.plat.goods为上面认证服务器
//获取访问令牌 access token 以及向资源服务器请求用户信息
授权后会重定向回调地址
route::get('/dew/sso', 'ssocontroller@callback'); //路由文件里添加php artisan make:controller ssocontroller //创建文件
<?phpnamespace app\http\controllers;u app\models\ur;u guzzlehttp\client;u illuminate\http\request;u illuminate\support\facades\log;class ssocontroller extends controller{ protected $http; public function __construct() { $this->http = new client(); } /** * 获取授权码后的回调url * @param request $request * @return \illuminate\http\redirectrespon */ public function callback(request $request) { $token = $this->token($request); //第二次交互 $login = $this->login($token);//第三次交互 if($login){ if($request_url = $request->input('state', null)){ $request->ssion()->put('url.intended', urldecode($request_url)); } return redirect()->intended(); //跳转到 http://laravel.plat.goods/ur }el{ return redirect()->to('http://laravel.plat.com/home/public/login'); //服务提供商网站必须登录 } } /** * 获取access token * @param $request * @return array|mixed */ protected function token($request) { $code = $request->code; if($code) { try { $respon = $this->http->post('http://laravel.plat.goods/oauth/token', [ 'form_params' => [ 'grant_type' => 'authorizatio好玩的网络游戏排行n_code', //固定值 'client_id' => 3, 'client_cret' => 'uihxnhosqohdtq8js6av7aoyk3gbnb9rjzidpawf', 'redirect_uri' => 'http://third.plat.goods/dew/sso', 'code' => $code, ], ]); $respon_data = json_decode((string)$respon->getbody(), true); return $respon_data; } catch (\exception $e) { log::error('get token by code failed: '.$code.' - '.$e->getmessage().' - '.$e->gettraceasstring()); return []; } }el{ return []; } } /** * 通过token获取用户信息,并进行登录操作 * @param $token * @return bool */ protected function login($token) { if(empty($token)) return fal; $access_token = $token['access_token']; try { // 资源服务器和认证服务器放在了一起,可以独立。 $respon = $this->http->request('get', 'http://laravel.plat.goods/api/ur', [ 'headers' => [ 'accept' => 'application/json', 'authorization' => $token['token_type'] . ' ' . $access_token, ] ]); $urs_body = $respon->getbody(); $data = json_decode($urs_body, true); if($data) { $ur = new ur($data); //becau of employee_i四川邮电大学d is guarded $ur->tattribute($ur->getkeyname(), $data['employee_id']); //login ur in my system auth()->login($ur, fal); return true; }el{ return fal; } }catch (\exception $e){ log::error('get ur failed by access_token:'.$access_token.'|'.$e->getmessage()); return fal; } }}
//设置资源文件
route::middleware('auth:api')->get('/ur', 'urcontroller@ur'); //routes/api.php文件中设置php artisan make:controller urcontroller //创建文件
class urcontroller extends controller{ public function ur(request $request) { return $request->ur(); }}
本文发布于:2023-04-07 19:17:14,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/be4f1ee49fb231e9c1fd9f2a7fe3e63f.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:单点登录 – API 认证系统 Passport(二).doc
本文 PDF 下载地址:单点登录 – API 认证系统 Passport(二).pdf
留言与评论(共有 0 条评论) |