laravel5.7/passport 密码授权简单使用

laravel/passport 有多种使用方式,本文只讲密码授权的使用方式。

一、安装

    composer require laravel/passport
    php artisan migrate
    php artisan passport:install      // 自动创建两个默认客户端
    php artisan passport:client --password    //创建自己的password专用客户端

二、增加路由: app/Providers/AuthServiceProvider.php文件中增加代码

    use Laravel\Passport\Passport; //这里载入Passport
    public function boot() {
      $this->registerPolicies();
      Passport::routes(); //这里加载passport路由 为 颁发访问令牌、撤销访问令牌、客户端以及私人访问令牌 注册必要的路由
      Passport::refreshTokensExpireIn(now()->addDays(30));//令牌默认长期有效 或tokensExpireIn 限制有效期
    }

三、配置文件 config/auth.php 设置 api 认证 guard 的 driver 选项为 passport

    'guards' => [

      'api' => [
        'driver' => 'passport',
        'provider' => 'outhusers', //指定账号的provider中的表
      ],
    ],

    'providers' => [
      'outhusers' => [
        'driver' => 'eloquent',
        'model' => App\OuthUser::class,  //数据表model  密码验证的username password 就是此表中的账号密码
      ],
    ],

  注意需要自行创建 OuthUser 表,用于获取token

四、获取token  (获取token可自行通过接口优化,设置为只传账号密码即可)

    // 访问 http://www.test.com/auth/password  即可看到token,api路由中访问:http://www.test.com/api/auth/password

    Route::get('/auth/password', function (\Illuminate\Http\Request $request){
      $http = new \GuzzleHttp\Client();

      $response = $http->post('http://www.shop.org:7888/oauth/token', [
        'form_params' => [
          'grant_type' => 'password',  // 密码模式固定为 password
          'client_id' => '3',      // 通过 passport:client 创建的客户端id
          'client_secret' => 'CnHjnzGK4iY4qATfePzf9465kUNAD6m2mcFxQ6DE',  //通过 passport:client创建的客户端 secret
          'username' => 'admin@qq.com', //登录的用户名,OuthUser表中任意用户邮箱账号;
          'password' => 'admin123', //密码
          'scope' => '',  //作用域,可填写 * 或者为空
        ],
      ]);
      return json_decode((string)$response->getBody(), true);

    });

五、设置路由保护

    前面用的是 guard 中的api

    Route::group(['middleware' => 'auth:api'], function ($router) {

      Route::get('/test', function (\Illuminate\Http\Request $request){
        echo 'ok';
        exit;
      });// 将所有需要保护的路由放此处即可
    });

    Route::get('/user', function () { echo 'ok';})->middleware('auth:api');

六、请求header设置访问令牌token

    // $accessToken 为返回的token
    $response = $client->request('GET', '/api/user', [
      'headers' => [
        'Accept' => 'application/json',
        'Authorization' => 'Bearer '.$accessToken,
      ],
    ]);

6.5 其他

  添加 HasApiTokens trait(代码复用)到自己的接口模型中, 此模型提供一些辅助函数用于检查用户的token和scope
    use Laravel\Passport\HasApiTokens;
    class User extends Authenticatable{
      use HasApiTokens;
    }

七、结束

    参考:Passport(Laravel5.5.*)密码授权简单使用

       [ Laravel 5.7 文档 ] 安全系列 —— API 认证(Passport)

 

posted @ 2019-02-28 20:18  梦忘川  阅读(2201)  评论(0编辑  收藏  举报