gigabait / laravel-sso

Laravel 实现单点登录(SSO)授权的库

v1.0.2 2023-04-15 08:40 UTC

This package is auto-updated.

Last update: 2024-09-04 20:14:19 UTC


README

Latest Version on Packagist Total Downloads

Laravel SSO

Laravel SSO 是一个用于在您的 Laravel 项目中实现单点登录(SSO)授权的包。此包允许您从另一个网站授权 Laravel 控制面板上的用户。

要求

  • PHP 7.3 或更高版本
  • Laravel 8.0 或更高版本

安装

要安装此包,请使用 Composer

composer require gigabait/laravel-sso

配置

  1. 运行以下命令以发布配置文件
php artisan vendor:publish --tag=sso

此命令将发布 config/sso.php 文件,您可以在其中设置 SSO 授权的密钥。

  1. 在您的 .env 文件中设置密钥
SSO_SECRET_KEY=your_secret_key

确保密钥长度为 32 个字符。

用法

  1. 要从另一个网站授权 Laravel 控制面板上的用户,首先在您的网站上执行 SSO 授权。
  2. 将用户重定向到 /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 文件。