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

时间:2019-05-08 08:28:53

标签: laravel azure active-directory azure-active-directory office365

我有一个仅供内部使用的自定义应用程序,仅在当前由超级管理员创建用户的地方使用。一些用户来自公司内部,而某些外部用户例如供应商/客户。

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

我已经搜索了所有MS文档,并获得了关于不同oauth方法的所有文档,但是不确定哪种方法适合我的需求。

我在想,也许我需要给管理员一种浏览AD并选择可以登录的用户的方法,然后使用某种MS用户ID在mysql数据库中创建非活动用户帐户。然后提供一个“使用MS登录”按钮,该按钮执行到MS并返回站点的常规身份验证重定向过程。此时,我可以检查一个ID,如果该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

2 个答案:

答案 0 :(得分:1)

您的第一手业务就是使用户能够登录基于Laravel的应用程序。为此,我强烈建议不要尝试重新发明轮子(至少不是完全重新发明),并利用现有的Laravel软件包。 Laravel Socialite可能是最好的起点,因为它有很长的现有community-provided Socialite providers列表,其中包括三个已经与Azure AD一起使用的列表:MicrosoftMicrosoft-Graph和{{ 3}}。 (注意:尽管我自己还没有测试过这些,但是前两个似乎是最有前途的,因为它们使用的是更新的v2端点。)

关于授权(控制访问),您有两个选择:

  1. Azure AD上的控件

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

    您可以将Azure AD的现有经验用于Microsoft-Azure,也可以全力以赴,并将这种经验直接构建到基于Laravel的应用程序中,利用Azure AD Graph API创建[app]角色分配]({managing user and role assignment for the app和用户选择器体验。

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

  2. 应用程序上的控件

    通过这种方法,您允许所有用户使用Azure AD登录应用程序,然后使用应用程序自己的授权逻辑来决定谁进一步做,以及他们在应用程序中扮演什么角色。

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

答案 1 :(得分:0)

如果以此方式进行操作,则超级管理员必须始终在AAD中具有此权限。从我的角度来看,这不太实用。

我将在Service Principal的帮助下进行此类应用程序辅助。您为用户分配一个角色(查找应用程序角色),然后您的业务逻辑必须确定该用户具有哪些权限。如果要使用应用程序角色功能,则可以借助它来限制对角色的访问。所有用户都可以登录,但是只有具有特定角色的用户才能看到该应用程序的内容。

我希望这些提示可以帮助您找到正确的方向,但是没有解决方案...:/