首页 > 解决方案 > 将 laravel 应用程序与 MS Active Directory 集成,但限制可以访问的用户

问题描述

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

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

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

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

我已经找到的链接:

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

标签: laravelazureactive-directoryazure-active-directoryoffice365

解决方案


您的首要任务是让用户能够登录基于 Laravel 的应用程序。为此,我强烈建议不要尝试重新发明轮子(至少不完全),并利用现有的 Laravel 包。Laravel Socialite可能是最好的起点,因为它拥有一长串现有的社区提供的 Socialite 提供商,其中三个已经与 Azure AD 合作:MicrosoftMicrosoft-GraphMicrosoft-Azure。(注意:虽然我自己没有测试过这些,但前两个似乎是最有希望的,因为它们使用更新的 v2 端点。)

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

  1. Azure AD 的控制

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

    您可以使用 Azure AD 的现有体验来管理应用程序的用户和角色分配,或者您可以全力以赴并将这种体验直接构建到基于 Laravel 的应用程序本身,利用 Azure AD Graph API 来创建 [app角色分配]( https://docs.microsoft.com/en-us/previous-versions/azure/ad/graph/api/entity-and-complex-type-reference#approleassignment-entity和用户选择器体验。

    提示:无论哪种情况,请记住,您可以在 Azure AD 中将应用程序“超级用户”设置为应用程序的“所有者”(Azure AD > 企业应用程序 >(应用程序)> 所有者),这将允许他们分配用户而无需授予他们在 Azure AD 中的任何额外权限。

  2. 在应用程序上控制

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

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


推荐阅读