Passport(Laravel5.5.*)密码授权简单使用 | Laravel China 社区 - 高品质的 Laravel 和 PHP 开发者社区

[Passport(Laravel5.5.*)密码授权简单使用 | Laravel China 社区 - 高品质的 Laravel 和 PHP 开发者社区]

1、安装 laravel 项目:

composer create-project laravel/laravel lhuaxi2 --prefer-dist "5.5.*";

安装完后配置好数据库等信息。

2、使用 Composer 安装 Passport :

composer require laravel/passport:~4.0;

注意 Laravel 5.6 已经发布,最新的 laravel/passport 版本为 5.0 适配 Laravel 5.6,所以我们需要使用 Laravel 5.5 的适配版本 4.0
(1)、安装成功之后,我们需要设置他们的服务提供者,所以打开config/app.php文件,并在其中添加以下代码

'providers' => [
    '''
    Laravel\Passport\PassprotServiceProvider::class,
],

注: laravel5.5 以上版本可以忽略这一步骤,此步骤争对 5.5 以下版本。

3、生成数据表:

  Passport 扩展包里已经自动注册了迁移文件加载,执行 migrate,会自动运行扩展包里的迁移文件,由此来创建存储客户端和令牌的数据表:
[](https://lccdn.phphub.org/uploads/images/201807/23/22730/DGGwS3nuXU.png?imageView2/2/w/1240/h/0)

[file

](https://lccdn.phphub.org/uploads/images/201807/23/22730/DGGwS3nuXU.png?imageView2/2/w/1240/h/0)

4、创建加密秘钥:

接下来,运行 php artisan passport:keys 命令来创建生成安全访问令牌时所需的加密密钥:

$ php artisan passport:keys

[file

](https://lccdn.phphub.org/uploads/images/201807/23/22730/CK0oAJ1kwk.png?imageView2/2/w/1240/h/0)

执行成功后,会在 storage 目录中看到两个以 oauth 开头的秘钥文件:
[](https://lccdn.phphub.org/uploads/images/201807/23/22730/1oZtAt66uJ.png?imageView2/2/w/1240/h/0)

[file

](https://lccdn.phphub.org/uploads/images/201807/23/22730/1oZtAt66uJ.png?imageView2/2/w/1240/h/0)

5、创建客户端:

 $ php artisan passport:client --password --name='huaxi-ios'

passport:client 命令可以创建一个客户端,由于我们使用的是密码模式,所以需要增加 --password 参数。同时还可以增加 --name参数为客户端起个名字,我们这里起名为 lhuaxi2-ios
[](https://lccdn.phphub.org/uploads/images/201807/23/22730/oleJqOdAmN.png?imageView2/2/w/1240/h/0)

[file

](https://lccdn.phphub.org/uploads/images/201807/23/22730/oleJqOdAmN.png?imageView2/2/w/1240/h/0)

命令行中已经输出了创建的 client_idclient_secret,我们找个地方复制保存起来。
6、创建控制器AuthorizationsController,命令:php artisan make:controller Api\\AuthorizationsController
AuthorizationsController中编写代码:

<?php

 namespace App\Http\Controllers\Api;

 use Illuminate\Http\Request;
 use App\Http\Controllers\Controller;
 use Psr\Http\Message\ServerRequestInterface;
 use Zend\Diactoros\Response as Psr7Response;
 use Psr\Http\Message\ServerRequestInterface;
 use League\OAuth2\Server\Exception\OAuthServerException;
 use League\OAuth2\Server\AuthorizationServer;
 use Illuminate\Support\Facades\Auth;

 class AuthorizationsController extends Controller
 {
     public function getAccessToken(AuthorizationServer $server, ServerRequestInterface $serverRequest)
       {
      try {
            return $server->respondToAccessTokenRequest($serverRequest, new Psr7Response)->withStatus(201);
        } catch (OAuthServerException $e) {
             return $this->response->errorUnauthorized($e->getMessage());
      }
       }

      public function getUserInfo()
      {
            $user = Auth::user();
            return $user;
        }
 } 

7、在api.php中加一条测试路由:

Route::group(['middleware' => 'auth:api'], function(){
   Route::post('get_user_info', 'Api\AuthorizationsController@getUserInfo');
 });
Route::post('get_access_token', 'Api\AuthorizationsController@getAccessToken');

8、令牌获取:
(1).获取访问令牌
  密码模式我们通过 http://lhuaxi2.com/api/get_access_token这个路由获取访问令牌。提交的参数如下:
  grant_type —— 密码模式固定为 password
  client_id —— 通过 passport:client 创建的客户端id
  client_secret —— 通过 passport:client创建的客户端 secret
  username —— 登录的用户名,数据库中任意用户邮箱;
  password —— 用户密码;
  scope —— 作用域,可填写 * 或者为空;
[](https://lccdn.phphub.org/uploads/images/201807/23/22730/ypz1b0r8h7.png?imageView2/2/w/1240/h/0)

[file

](https://lccdn.phphub.org/uploads/images/201807/23/22730/ypz1b0r8h7.png?imageView2/2/w/1240/h/0)

   提交正确的 client 信息以及任意已存在用户的用户名和密码,可以正确的获取到访问令牌。

  token_type —— 令牌类型;
  expires_in—— 多长时间后过期;
  access_token —— 访问令牌;
  refresh_token —— 刷新令牌;
(2).刷新访问令牌
  刷新访问令牌 接口与 获取访问令牌 接口一样,只是参数不同。
  grant_type —— 刷新令牌固定为 refresh_token
  client_id —— 通过 passport:client 创建的客户端id
  client_secret —— 通过 passport:client 创建的客户端 secret
  refresh_token —— 刷新令牌;
  scope —— 作用域,可填写 * 或者为空;
[](https://lccdn.phphub.org/uploads/images/201807/23/22730/WxNH5H7Ln5.png?imageView2/2/w/1240/h/0)

[file

](https://lccdn.phphub.org/uploads/images/201807/23/22730/WxNH5H7Ln5.png?imageView2/2/w/1240/h/0)

刷新令牌不用提交用户的用户名和密码,而是直接使用 refresh_token 换取新的访问令牌,注意修改 grant_typerefresh_token
9、把获取用户信息的接口放在api中间件外面就获取不到用户信息的:
[

file

](https://lccdn.phphub.org/uploads/images/201807/23/22730/Rf0QurMlBE.png?imageView2/2/w/1240/h/0)
返回结果:
[

file

](https://lccdn.phphub.org/uploads/images/201807/23/22730/q0kTxx0nRo.png?imageView2/2/w/1240/h/0)
把这条路由放回api中间件里面:
返回结果:
[

file

](https://lccdn.phphub.org/uploads/images/201807/23/22730/KbaE9LMjqf.png?imageView2/2/w/1240/h/0)
[

file

](https://lccdn.phphub.org/uploads/images/201807/23/22730/kAXmSfKthb.png?imageView2/2/w/1240/h/0)
passport简单使用,欢迎大家一起改进学习,发布更好文章,一起进步。谢谢!

eiomi


Original url: Access

Created at: 2018-10-10 17:11:03

Category: default

Tags: none

请先后发表评论
  • 最新评论
  • 总共0条评论