12/08/2018, 13:09

Sử dụng Oauth2

Để cho nhanh chóng, các bạn muốn biết Oauth2 để làm cái gì thì mời các bạn đọc bài Introduction to Oauth2 của anh Tùng D. Bài này mình sẽ giới thiệu cách sử dụng 1 package Oauth2 trong Laravel. Giới thiệu package Ở đây mình muốn giới thiệu package oauth2 server laravel mà mình đã dùng qua. Nó ...

Để cho nhanh chóng, các bạn muốn biết Oauth2 để làm cái gì thì mời các bạn đọc bài Introduction to Oauth2 của anh Tùng D. Bài này mình sẽ giới thiệu cách sử dụng 1 package Oauth2 trong Laravel.

Giới thiệu package

Ở đây mình muốn giới thiệu package oauth2 server laravel mà mình đã dùng qua. Nó hỗ trợ hết các loại grant:

  • Authorization code grant
  • Client credentials grant
  • Resource owner password credentials grant
  • Refresh grant
  • Ngoài ra còn có thể sử dụng grant tự định nghĩa của người dùng.

Cài đặt

Laravel 4

  • Thêm dòng sau vào file composer.json
"lucadegasperi/oauth2-server-laravel": "^3.0"
  • Chạy composer update

  • Thêm vào providers trong file app/config/app.php dòng sau

'LucaDegasperiOAuth2ServerStorageFluentStorageServiceProvider',
'LucaDegasperiOAuth2ServerOAuth2ServerServiceProvider',
  • Thêm aliases
'Authorizer' => 'LucaDegasperiOAuth2ServerFacadesAuthorizerFacade',
  • Để tùy chỉnh package, chạy lệnh sau:
php artisan config:publish lucadegasperi/oauth2-server-laravel

sau đó vào app/config/packages/lucadegasperi/oauth2-server-laravel/oauth2.php để cấu hình theo ý muốn.

  • Thêm migration:
php artisan oauth2-server:migrations
  • Tạo Controller:
php artisan oauth2-server:controller

Laravel 5

Tuơng tự với laravel 4, ta có:

  • Thêm dòng sau vào file composer.json
"lucadegasperi/oauth2-server-laravel": "5.0.*"
  • Chạy composer update

  • Thêm vào providers trong file config/app.php dòng sau

LucaDegasperiOAuth2ServerStorageFluentStorageServiceProvider::class,
LucaDegasperiOAuth2ServerOAuth2ServerServiceProvider::class,
  • Thêm aliases
'Authorizer' => LucaDegasperiOAuth2ServerFacadesAuthorizer::class,
  • Thêm vào $middleware trong file app/Http/Kernel.php
LucaDegasperiOAuth2ServerMiddlewareOAuthExceptionHandlerMiddleware::class,
  • Sau đó thêm vào $routeMiddleware
'oauth' => LucaDegasperiOAuth2ServerMiddlewareOAuthMiddleware::class,
'oauth-user' => LucaDegasperiOAuth2ServerMiddlewareOAuthUserOwnerMiddleware::class,
'oauth-client' => LucaDegasperiOAuth2ServerMiddlewareOAuthClientOwnerMiddleware::class,
'check-authorization-params' => LucaDegasperiOAuth2ServerMiddlewareCheckAuthCodeRequestMiddleware::class,
  • Để tùy chỉnh package, chạy lệnh sau:
php artisan vendor:publish

sau đó vào config/oauth2.php để cấu hình theo ý muốn.

  • Thêm migration:
php artisan migrate

Sử dụng

Để hiểu cách dùng, ta giả sử có 1 ứng dụng client muốn sử dụng 1 tài nguyên nào đó của 1 server chẳng hạn.

Server

  • Cấu hình lại oauth, giả sử ta dùng laravel 4, và dùng authorization code grant kết hợp với refresh token, chúng ta vào app/config/packages/lucadegasperi/oauth2-server-laravel/oauth2.php và cài đặt grant type như sau:
    'grant_types' => [
        'authorization_code' => [
            'class' => 'LeagueOAuth2ServerGrantAuthCodeGrant',
            'access_token_ttl' => 3600,
            'auth_code_ttl'   => 3600
        ],
        'refresh_token' => [
            'class' => 'LeagueOAuth2ServerGrantRefreshTokenGrant',
            'access_token_ttl' => 3600,
            'refresh_token_ttl' => 36000
        ]
    ],

Giải thích lại 1 chút, khi chúng ta dùng như trên, thì cách hoạt động của ứng dụng sẽ như thế này: client sẽ gửi yêu cầu tới server, sau đó server trả lại 1 mã, gọi là authorization code, sau đó, client sẽ dùng mã này gửi lại tới server và server sẽ trả về access token. Và client sẽ dùng access token để sử dụng tài nguyên server cho phép.

Nhưng mà cái access token này cũng có hạn sử dụng, hết hạn thì hết dùng, nếu mà làm lại các bước trên cũng mệt, thế nên ta có refresh token được gửi kèm access token đầu tiên. Khi access token này hết hạn thì sẽ dùng refresh token đi kèm để được lấy 1 access token mới và kèm theo là 1 refresh token mới, và cái refresh token cũng có thời hạn, nếu hết hạn cả 2 cái thì mời bạn làm lại từ đầu             </div>
            
            <div class=

0