Single sign-on bằng SAML với Laravel 5

Tram Ho

Giới thiệu

Đây là những memo khi sử dụng Single sign-on bằng SAML cho Laravel 5.

Phần lớn nội dung là giống với README của laravel-saml2.

Môi trường

Hoạt động từ Laravel 5.4 trở về sau.

Cài đặt

Cài đặt laravel-saml2

composer require aacotroneo/laravel-saml2

Với các phiên bản Laravel trước 5.5, thì cần thêm Service Provider vào configapp.php như bên dưới:

configapp.php

Thực hiện vendor:publish
php artisan vendor:publish --provider="AacotroneoSaml2Saml2ServiceProvider"
appconfigsaml2_settings.php sẽ được tạo ra.

Tạo Laravel authenticataion

Tạo Auth cho Laravel

Cài đặt SAML

Đăng ký metadata vào Idp

Xác nhận metadata SAML của phía Laravel (SAML SP) theo link bên dưới, sau đó đăng ký vào phía IdP.

http://localhost/Laravel-app-name/public/saml2/metadata

Thiết lập metadata IdP cho Laravel

Thiết lập metadata IdP vào saml2_settings.php của phía Laravel.

Chỉ định các biến môi trường entityId, singleSignOnService, singleLogoutService, x509cert.

Chỗ này là đang sử dụng IdP Google.

appconfigsaml2_settings.php

Thay đổi routesMiddleware

Vì Login session chưa được tạo ra khi thêm VerifyCsrfToken, nên phải thay đổi routesMiddleware của saml2_settings.php như bên dưới:

appconfigsaml2_settings.php
'routesMiddleware' => ['saml'],

Thêm Middle ware group SAML mới vào Kernel.php.

Nội dung của saml group sau khi bỏ VerifyCsrfToken ra khỏi web group.

appHttpKernel.php

Tạo phần authentication

Tạo Event listen cho SAML login và logout

Mô tả event khi SAML login và logout.

Vì liên kết với Auth của Laravel nên sẽ làm như sau:

  • Khi SAML login thì Auth cũng login
  • Khi SAML logout thì Auth cũng logout

Thêm method boot vào EventServiceProvider.php
appProvidersEventServiceProvider.php

Đồng bộ các thuộc tính thu được với môi trường.
Nếu xảy ra lỗi 401 khi xác thực thì sử dụng view 401 tương ứng như link ở dưới:
appresourcesviewserrors401.blade.php

Tạo Middleware SAML authentication

Tạo Middleware để xác thực SAML.
Bằng việc sử sụng Middleware này, cần login SAML để truy cập đến các pages.

Sử dụng lênh artisan để tạo Middleware tên SamlAuth.

php artisan make:middleware SamlAuth

Chỉnh sửa SamlAuth.php như sau:

appHttpMiddlewareSamlAuth.php

Đăng ký SamlAuth vào routeMiddleware của Kernel.php.

appHttpKernel.php

Sử dụng authentication

Sử dụng Middleware authentication.

Bên dưới là 1 ví dụ của việc sử dụng middleware cho route group.

Kiểm tra hoạt động

Tạo data user có email và IdP tại table Users.

Truy cập vào /home, sẽ xuất hiện màn hình login IdP.

Tiến hành login bằng email address.

Tham khảo

Laravel 5 でSAMLシングルサインオンする

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo