redmix0901/oauth2-client-sso

Package kết hợp với oauth2 client tạo đăng nhập single sign on

v1.8.2 2022-06-15 06:41 UTC

This package is auto-updated.

Last update: 2024-05-15 11:09:23 UTC


README

Cài đặt qua composer

composer require redmix0901/oauth2-client-sso

publish file config vào thư mục config

$ php artisan vendor:publish --tag=oauth2-sso-config

Sử dụng

middleware này sẽ luôn làm mới access token khi hết hạn.

Route::middleware('oauth2-sso') 

Nếu bạn muốn redirect về trang Auth Server để đăng nhập nếu user chưa đăng thì thêm redirect phía sau.

Route::middleware('oauth2-sso:redirect') 

Nếu muốn token được gắn trên cookie, để gọi xác thực api thì thêm cookie

Route::middleware('oauth2-sso:cookie') 

Hoặc bạn có thể kết hợp cả 2:

Route::middleware('oauth2-sso:cookie,redirect') 

Nếu cần xác thực Token của user từ Resource Server lên (Auth Server) id.todpev.vn thì dùng guard và config trong file config/auth.php như sau

'api' => [
    'driver' => 'sso-api',
    'provider' => 'users',
    'hash' => false,
]

Việc xác thực API sẽ có 2 trường hợp:

  • Nếu không tách Resource Server và App Server ra làm 2 thì bạn có thể kiểm bằng cách thông qua cookie.
Route::middleware('oauth2-sso:cookie') 

middleware này sẽ gắn token vào cookie và server sẽ kiểm tra token đó để xác thực.

  • Trường hợp 2 là tách Resource Server và App Server: Bạn có xác thực bằng cookie với điều kiện là cả 2 cùng là Laravel, chung APP_KEY và setup subdomain có thể share cookie cho nhau, và khai báo middleware như trên. Hoặc bạn phải gắn token vào header.
'Authorization' => 'Bearer ' . $token

-Trong trường hợp sử dụng Single page application, khi token trên cookie hết hạn bạn có thể gọi request /oauth2/issueToken để được cấp phát token mới. Nếu có lỗi, hết hạn hoặc bị logout thì sẽ trả về message sau:

[
    'error'   => true,
    'data'    => null,
    'message' => 'Unauthenticated.',
]

Chỉnh sửa config như sau:

'defaults' => [
    'guard' => 'oauth2',
    'passwords' => 'users',
],

'guards' => [
        ...
    'oauth2' => [
        'driver' => 'sso-session',
    ]
],

defaults là không bắt buộc. Nếu không chỉnh sửa defaults thì bạn có thể dùng auth()->guard('oauth2')->user()

Nếu muốn lấy thông tin user từ request có thể dùng cách sau.

$request->user()

Nếu bạn chọn config mapingUser = true.
User sẽ được tự động map với user trong database cũa App Server.

Nếu Auth Server trả về 1 user mới thì nó sẽ tự động tạo 1 user với các trường mà Auth Server trả về và được map với fillable trong model User. Việc của bạn là update thông tin cho user đó trong event:

Redmix0901\Oauth2Sso\Events\UserSsoCreated::class

Có thể logout bằng link sau: /oauth2/logout hoặc bằng tên route sso.logout

Có thể login bằng phương thức get link sau: /oauth2/login hoặc bằng tên sso.login.authorization_code

Login with email, password bằng phương thức post: /oauth2/login hoặc bằng tên sso.login.password_grant