Chia sẻ cách sử dụng một module Laravel API (Laravel API Key Auth)

laravel api

Hướng dẫn các bước cài đặt

Trước tiên chạy lệnh cmd sau:

composer require ejarnutowski/laravel-api-key

Thêm đoạn code khai báo trong mảng providers trong file config/app.php

'providers' => [
    ...
    Ejarnutowski\LaravelApiKey\Providers\ApiKeyServiceProvider::class,
],

 Chép các file trong migration vào database/migrations với lệnh sau:

$ php artisan vendor:publish

Chạy lệnh thực thi các file tạo bảng dữ liệu:

$ php artisan migrate

Sau khi thực thi lệnh sẽ tạo 3 bảng sau:

api_keys
api_key_access_events
api_key_admin_events

Chạy lệnh tạo một Key ngẫu nhiên:

php artisan apikey:generate {name}

 Ví dụ: Tạo một key với tên là app1 (Lưu ý: Tên không được có ký tự đặt biệt)

$ php artisan apikey:generate app1
  
// API key created
// Name: app1
// Key: 0ZdNlr7LrQocaqz74k6usQsOsqhqSIaUarSTf8mxnHuQVh9CvKAfpUy94VvBmFMq

 Cách thay đổi trạng thái sử dụng cho key.

Vô hiệu hóa key vớí lệnh cmd sau:

$ php artisan apikey:deactivate app1
  
// Deactivated key: app1

 

Kích hoạt key với lệnh cmd sau:

$ php artisan apikey:activate app1
  
// Activated key: app1

 

Cách xóa một key với lệnh cmd sau:

$ php artisan apikey:delete app1
  
// Are you sure you want to delete API key 'app1'? (yes/no) [no]:
// > yes
  
// Deleted key: app1

 

Cách hiển thị danh sách các key với dòng lệnh cmd hoặc có thể vào cơ sở dư liệu xem bảng dữ liệu "api_keys".

$ php artisan apikey:list -D
 
// +----------+----+-------------+---------------------+------------------------------------------------------------------+
// | Name     | ID | Status      | Status Date         | Key                                                              |
// +----------+----+-------------+---------------------+------------------------------------------------------------------+
// | app1     | 5  | deleted     | 2017-11-03 13:54:51 | 0ZdNlr7LrQocaqz74k6usQsOsqhqSIaUarSTf8mxnHuQVh9CvKAfpUy94VvBmFMq |
// | app2     | 1  | deleted     | 2017-11-02 22:34:28 | KuKMQbgZPv0PRC6GqCMlDQ7fgdamsVY75FrQvHfoIbw4gBaG5UX0wfk6dugKxrtW |
// | app3     | 3  | deactivated | 2017-11-02 23:12:34 | IrDlc7rSCvUzpZpW8jfhWaH235vJAqFwyzVWpoD0SLGzOimA6hcwqMvy4Nz6Hntn |
// | app4     | 2  | active      | 2017-11-02 22:48:13 | KZEl4Y2HMuL013xvg6Teaa7zHPJhGy1TDhr2zWzlQCqTxqTzyPTcOV6fIQZVTIU3 |
// +----------+----+-------------+---------------------+------------------------------------------------------------------+

 

Cách sử dụng:

Yêu cầu khai báo khóa API: có 2 cách

Cách yêu cầu khai báo tại Route.

Route::get('api/user/1', function () {
    //
})->middleware('auth.apikey');

 

Cách yêu cầu khai báo tại Controller.

class UserController extends Controller
{
    /**
     * Instantiate a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth.apikey');
    }
}

 

Đường dẫn chỉ cho phép truy cập với khai báo header "X-Authorization" có giá trị là khóa đã kích hoạt.

X-Authorization: KuKMQbgZPv0PRC6GqCMlDQ7fgdamsVY75FrQvHfoIbw4gBaG5UX0wfk6dugKxrtW

 

Trường hợp với khóa chưa được khai báo hoặc khóa chưa được kích hoạt sẽ trả về giá trị như sau:

{
    "errors": [
        {
            "message": "Unauthorized"
        }
    ]
}

 

Nhật ký được lưu lại:

Mỗi yêu cầu khóa API vượt qua thành công sẽ được ghi lại trong bảng api_key_access_events với thông tin sau: api_key_id, ip_address, url, created_at, updated_at

Bất cứ khi nào một khóa API được tạo, kích hoạt, hủy kích hoạt hoặc xóa, một bản ghi sẽ được ghi vào bảng api_key_admin_events. Mỗi bản ghi chứa các thông tin sau: api_key_id, ip_address, event, created_at, updated_at

Đoạn code PHP thực thi link API và hiển thị kết quả trả về:

<?php
     $get_url = '{put_url_here}';
$ch = curl_init($get_url);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('X-Authorization: {key}'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
curl_close($ch);
var_dump($result);
?>

 

Chia sẻ: Ngụy Kim Hưng

Tham khảo link nguồn: Authorize requests to your Laravel application with API keys