码迷,mamicode.com
首页 > Windows程序 > 详细

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

时间:2018-12-19 21:08:49      阅读:380      评论:0      收藏:0      [点我收藏+]

标签:one   \n   ice   services   json   配置   允许   function   cat   

 

1.首先通过 Composer 包管理器安装 Passport:

composer require laravel/passport

注:如果安装过程中提示需要更高版本的 Laravel:laravel/passport v5.0.0 requires illuminate/http ~5.6,可以通过指定版本来安装 composer require laravel/passport ~4.0

 

2.注册服务提供者

将 Passport 的服务提供者注册到配置文件 config/app.php 的 providers 数组中

Laravel\Passport\PassportServiceProvider::class,

Laravel 5.5之后会自动注册服务提供者

 

3.迁移数据库

php artisan migrate

注:如果你不想使用 Passport 的默认迁移,需要在 AppServiceProvider 的 register 方法中调用 Passport::ignoreMigrations 方法。你可以使用 php artisan vendor:publish --tag=passport-migrations 导出默认迁移。

 

 

4.创建生成安全访问令牌(token)所需的加密键

需要运行 passport:install 命令,该命令将会创建生成安全访问令牌(token)所需的加密键,此外,该命令还会创建「personal access」和「password grant」客户端用于生成访问令牌:

php artisan passport:install
生成记录存放在数据表 oauth_clients

技术分享图片?

 

5.运行完这个命令后,添加 Laravel\Passport\HasApiTokens trait 到 App\User 模型,该 trait 将会为模型类提供一些辅助函数用于检查认证用户的 token 和 scope:

<?php

namespace App;

use Laravel\Passport\HasApiTokens;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    use HasApiTokens, Notifiable;
}

 

6.接下来,你需要在 AuthServiceProvider 的 boot 方法中调用 Passport::routes 方法,该方法将会为颁发访问令牌、撤销访问令牌、客户端以及私人访问令牌注册必要的路由:

<?php

namespace App\Providers;

use Laravel\Passport\Passport;
use Illuminate\Support\Facades\Gate;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;

class AuthServiceProvider extends ServiceProvider
{
    /**
     * The policy mappings for the application.
     *
     * @var array
     */
    protected $policies = [
        ‘App\Model‘ => ‘App\Policies\ModelPolicy‘,
    ];

    /**
     * Register any authentication / authorization services.
     *
     * @return void
     */
    public function boot()
    {
        $this->registerPolicies();

        Passport::routes();
    }
}

 

7.最后,在配置文件 config/auth.php 中,需要设置 api 认证 guard 的 driver 选项为 passport。这将告知应用在认证输入的 API 请求时使用 Passport 的 TokenGuard

‘guards‘ => [
    ‘web‘ => [
        ‘driver‘ => ‘session‘,
        ‘provider‘ => ‘users‘,
    ],

    ‘api‘ => [
        ‘driver‘ => ‘passport‘,
        ‘provider‘ => ‘users‘,
    ],
],

 

 

密码授权令牌

OAuth2 密码授权允许你的其他第一方客户端,例如移动应用,使用邮箱地址/用户名+密码获取访问令牌。这使得你可以安全地颁发访问令牌给第一方客户端而不必要求你的用户走整个 OAuth2 授权码重定向流程。

创建密码发放客户端

在应用可以通过密码授权颁发令牌之前,需要创建一个密码授权客户端,你可以通过使用带 --password 选项的 passport:client 命令来实现。如果你已经运行了 passport:install 命令,则不必再运行这个命令:

php artisan passport:client --password

这里我们使用一开始通过 passport:install 命令创建的记录作为测试记录。

请求令牌

创建完密码授权客户端后,可以通过发送 POST 请求到 /oauth/token 路由(带上用户邮箱地址和密码)获取访问令牌。这个路由已经通过 Passport::routes 方法注册过了,不需要手动定义。如果请求成功,就可以从服务器返回的 JSON 响应中获取 access_token 和 refresh_token

技术分享图片

和通过授权码返回数据格式一致。

这里的username使用的是email,如果想要通过name、iphone来获取,需要在users模型中添加一下方法

    // 允许passport通过这些字段找到你的用户实例
    public function findForPassport($name)
    {
        $user = Users::where(‘name‘, $name)
            // ->orWhere(‘phone‘, $name)
            ->orWhere(‘email‘, $name)
            ->first();
        return $user;
    }

 

注:记住,访问令牌默认长期有效,不过,如果需要的话你也可以配置访问令牌的最长生命周期

 

 友情链接:

  laravel官网-API身份验证

  [ Laravel 5.6 文档 ] 安全系列 —— API 认证

 

 

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

标签:one   \n   ice   services   json   配置   允许   function   cat   

原文地址:https://www.cnblogs.com/cap-rq/p/10145523.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!