gigabait / laravel-sso
Laravel 实现单点登录(SSO)授权的库
v1.0.2
2023-04-15 08:40 UTC
Requires
- php: ^7.3|^8.0
- illuminate/support: ^9.0
README
Laravel SSO
Laravel SSO 是一个用于在您的 Laravel 项目中实现单点登录(SSO)授权的包。此包允许您从另一个网站授权 Laravel 控制面板上的用户。
要求
- PHP 7.3 或更高版本
- Laravel 8.0 或更高版本
安装
要安装此包,请使用 Composer
composer require gigabait/laravel-sso
配置
- 运行以下命令以发布配置文件
php artisan vendor:publish --tag=sso
此命令将发布 config/sso.php 文件,您可以在其中设置 SSO 授权的密钥。
- 在您的 .env 文件中设置密钥
SSO_SECRET_KEY=your_secret_key
确保密钥长度为 32 个字符。
用法
- 要从另一个网站授权 Laravel 控制面板上的用户,首先在您的网站上执行 SSO 授权。
- 将用户重定向到 /sso-login 路由,其中包含一个 GET 参数 auth_marker,该参数包含以 JSON 格式加密的用户数据。例如
use Illuminate\Encryption\Encrypter; public function redirectToAppB() { $user = Auth::user(); $authMarkerData = [ 'email' => $user->email, 'secret_key' => config('sso.secret_key') ]; $key = config('sso.secret_key'); $cipher = config('app.cipher'); $encrypter = new Encrypter($key, $cipher); $token = json_encode($authMarkerData); $encryptedToken = $encrypter->encrypt($token); header("Location: https://app-b.example.com/sso-login?token=" . urlencode($encryptedToken)); }
用户被重定向到 /sso-login 路由后,如果他们的电子邮件地址与数据库中的记录匹配,则用户将自动在 Laravel 控制面板上获得授权。
注意
确保两个应用程序在它们各自的 .env 文件中使用相同的 SSO_SECRET_KEY。这是加密和解密过程正常工作的要求。密钥长度必须为 32 个字符。
错误处理
如果在 SSO 过程中出现错误,用户将被重定向到 App B 的登录页面。如果密钥长度不是 32 个字符,将显示错误消息。
支持
如果您有任何问题或问题,请在本项目的 GitHub 存储库中创建一个新的问题。
许可
本项目采用 MIT 许可证。有关详细信息,请参阅 LICENSE 文件。