scollmore/zerotrust

一个用于将 Azure 活动目录作为中间件安全包装添加到您的应用程序的包。

v0.1 2024-03-07 11:39 UTC

This package is auto-updated.

Last update: 2024-09-07 12:40:57 UTC


README

Latest Version on Packagist GitHub Action Tests GitHub Action Code Style Total Downloads

Zero trust 是一个 Laravel 中间件,它使用 Azure 活动目录为您的企业应用程序提供一个身份验证中间件包装,让您能够利用账户限制和 2FA(如果您的 AD 中已启用)而无需触及应用程序的身份验证。

将中间件添加到您的路由(s)后,用户将看到一个登录选择页面(如果添加了多个目录)或直接被发送到 Microsoft 登录页面。

Multiple domain selection

设置 Microsoft Azure 活动目录

要设置 Azure AD 以使用此包,您可以按照 Microsoft 的以下指南进行操作 这里

对于您的回调 URL,您需要使用 https://yourdomain.com/zero-trust/callback

安装

通过 Composer

composer require scolmore/zerotrust

发布配置和视图

php artisan vendor:publish --provider="Scolmore\ZeroTrust\ZeroTrustServiceProvider"

用法

配置

以下内容需要添加到您的 .env 文件中

ZEROTRUST_TITLE="My Organisation"
ZEROTRUST_APP_NAME="My application name"
ZEROTRUST_ENABLED=true

ZEROTRUST_AZURE_NAME="Company AD one"
ZEROTRUST_AZURE_TENANT_ID=<YOUR TENANT ID>
ZEROTRUST_AZURE_CLIENT_ID=<YOUR CLIENT APPLICATION ID>
ZEROTRUST_AZURE_SECRET=<YOUR SECRET FOR GRAPH API>

中间件

将中间件添加到所需的路由(s)/路由组。

Route::middleware('zero-trust')->get('/dashboard', function () {
    return view('dashboard');
})->name('dashboard');

自动登录

如果您想尝试自动登录用户,请在您的 .env 文件中设置 ZEROTRUST_AUTO_LOGIN=true

这将针对您的用户模型中的 Microsoft 已登录用户进行查找,如果找到,则用户将被登录到您的应用程序。

用户模型和电子邮件列可以在配置文件中更改。

受限域

您可能有一个包含许多不同域的 Microsoft 活动目录,而对于您的特定应用程序,您想要对其进行限制。

假设您的 AD 具有以下域

  • example.com
  • foo.com
  • bar.com

您想要 foo.com 和 bar.com 具有访问权限,但不允许 example.com。为此,只需将以下内容添加到您的 .env 文件中

ZEROTRUST_RESTRICTED_DOMAINS="foo.com,bar.com"

现在,当来自 example.com 的用户尝试登录时,他们将无法访问,并显示以下屏幕。

Restricted domain

注销

当用户注销时,您还希望同时注销 Microsoft 账户。为此,用 route('zero-trust.logout') 替换您的 Laravel 注销方法中调用 route('logout') 的地方。

扩展中间件

如果您希望在用户认证或受限域尝试登录时执行其他操作,您可以从自己的中间件扩展中间件。

例如,也许您想使用 Spatie activity log 记录访问。

在这种情况下,创建一个新的中间件,扩展 ZeroTrust 中间件并重写 completed 方法。

ZeroTrustMiddleware.php

<?php

namespace App\Http\Middleware;

use Scolmore\ZeroTrust\ZeroTrust;

class ZeroTrustMiddleware extends ZeroTrust
{
    public function completed(bool $success, array $user): void
    {
        // TODO: Add your logging here.
        
        // $success = true if access was granted or false if the user was refused due to restrictions.
        
        // $user is an array of the user's details from the Microsoft graph API.
    }
}

变更日志

有关最近更改的更多信息,请参阅 变更日志

测试

composer test

安全

如果您发现任何安全相关的问题,请通过电子邮件 sam@scolmore.com 而不是使用问题跟踪器。

鸣谢

许可

MIT。有关更多信息,请参阅 许可文件