将 laravel 应用程序与 MS Active Directory 集成,但限制可以访问的用户

Integrate laravel app with MS Active Directory but restrict users who can access

我有一个仅供内部使用的自定义应用程序,当前用户由超级管理员创建。一些用户来自企业内部,一些来自外部,例如suppliers/customers.

我正在寻找一种将 MS Active Directory 集成为登录选项的方法,但希望能够限制企业中的哪些用户可以实际使用此方法。

我搜索了所有 MS 文档,并拥有关于不同 oauth 方法的所有文档,但不确定哪一种适合我的需要。

我在想,也许我需要给管理员一种方式来浏览 AD 和 select 可以登录的用户,然后通过某种方式在 mysql 数据库中创建非活动用户帐户MS 用户 ID。然后提供一个 'Sign in with MS' 按钮,执行通常的身份验证重定向过程到 MS 并返回到站点。那时我可以检查一个 ID,如果它与允许的用户帐户匹配,如果是,则同步其余数据,例如姓名、电子邮件、phone 等..

我已经找到的链接:

https://docs.microsoft.com/en-gb/azure/active-directory/develop/authentication-scenarios

https://docs.microsoft.com/en-gb/graph/tutorials/php

https://github.com/microsoftgraph/msgraph-training-phpapp/tree/master/Demos/03-add-msgraph

如果您要这样做,super-admin 必须在 AAD 中始终具有此权限。从我的角度来看,它不太实用。

在服务负责人的帮助下,我希望这样 app-assigments。您为用户分配一个角色(寻找应用程序角色),然后您的业务逻辑必须决定用户拥有哪些权限。如果您要使用应用程序角色功能,则可以在它的帮助下限制对该角色的访问。所有用户都可以登录,但只有具有特定角色的用户才能看到应用程序的内容。

我希望这些提示可以帮助找到正确的方向,但是没有灵丹妙药...:/

您的首要任务是让用户登录 Laravel-based 应用。为此,我强烈建议 不要 尝试 re-invent 轮子(至少不完全),并利用现有的 Laravel 包。 Laravel Socialite is probably the best place to start, since it has a long list of existing community-provided Socialite providers, including three which work with Azure AD already: Microsoft, Microsoft-Graph and Microsoft-Azure。 (注意:虽然我自己没有测试过其中任何一个,但前两个似乎是最有前途的,因为它们使用较新的 v2 端点。)

在授权(控制访问)方面,您有两种选择:

  1. 控制在 Azure AD

    将应用程序与 Azure AD 集成后,您可以在 Azure AD 中配置应用程序以要求分配用户,然后通过向应用程序分配(或不分配)用户来控制对应用程序的访问。未分配的用户甚至无法通过 sign-in 页面。

    您可以将 Azure AD 的现有体验用于 managing user and role assignment for the app, or you could go all-out and build this experience directly into the Laravel-based app itself, making use of the Azure AD Graph API to create the [app role assignments](https://docs.microsoft.com/en-us/previous-versions/azure/ad/graph/api/entity-and-complex-type-reference#approleassignment-entity 和用户选择器体验。

    提示:无论哪种情况,请记住您可以将应用 "superuser" 设为 Azure AD 中应用的 "owner"(Azure AD > 企业应用 > (app) > 所有者),这将允许他们分配用户,而无需在 Azure AD 中为他们提供任何额外权限。

  2. 在应用程序中控制

    在这种方法中,您允许所有用户使用 Azure AD 登录应用程序,但随后您使用应用程序自己的授权逻辑来决定谁可以继续登录,以及他们在应用程序中获得什么角色。

实际上,您很可能会发现最好的方法是结合使用两者,其中一些授权由 Azure AD 强制执行,下一级由应用程序本身强制执行。