我在PHP中编写了一个小应用程序,我需要检查给定用户是否分配了给定的角色。我正在使用Azure App Service并启用了应用服务身份验证,以根据azure活动目录对用户进行身份验证。作为应用程序的一部分,我需要获取用户的用户名,显示名称,以及他们是否是三个安全组中的一个或多个的成员,他们可以参与这些安全组来定义他们在应用程序中具有的访问级别。
我需要这样做,因为我无法在应用程序中管理角色,而是需要通过活动目录安全组进行管理。我正在寻找一种原生于azure app服务的方法(如果可能的话,理想情况下不进行单独的LDAP查找)。我知道如何从发送到应用程序的标头数据中提取经过身份验证的用户名(HTTP_X_MS_CLIENT_PRINCIPAL_NAME
)但是我不知道如何获取完整的显示名称以及如何检查用户是否分配了特定的角色。我已经输出了整个php $_SERVER
超全局数组的副本,看看我在寻找的数据是否在那里,但我找不到它。
出于本问题的目的,做出以下假设......
user1@domain.com被分配角色role1,role2,role3
user2@domain.com仅被分配角色role3
因此,如果任一用户登录,我需要能够根据其AD条目显示其全名,并且需要能够检查它们是否属于安全组role1
role2
和/或role3
。
我会发布一个我的代码示例,但我不知道从哪里开始获取这些数据所以我到目前为止唯一的代码是一个测试块,用于将所有$_SERVER
值打印到页面上进行测试目的。
由于
答案 0 :(得分:0)
一般来说,您可以利用Microsoft Graph REST APIs来实现您的要求。
首先,您可以按照https://graph.microsoft.io/en-us/docs/authorization/app_only实现仅以app方式获取访问令牌的功能,然后您可以发出List memberOf的HTTP请求以获取用户的组和目录角色是。的直接成员。
HTTP GET网址应该与https://graph.microsoft.com/v1.0/users/{HTTP_X_MS_CLIENT_PRINCIPAL_NAME you get from header}/memberOf
类似,并在authorization
标题中设置您获得的访问权限。
此外,您可以参考https://github.com/Azure-Samples/active-directory-php-graphapi-directoryextensions-web/blob/master/AuthorizationHelperForGraph.php示例,了解如何仅在应用中获取访问令牌。