【问题标题】:Get assigned roles in Azure Web App with PHP使用 PHP 在 Azure Web App 中获取分配的角色
【发布时间】:2020-01-26 01:39:29
【问题描述】:

我使用 PHP 创建了一个 Azure Web 应用程序。我启用了 AAD 身份验证,一切都解决了,您必须以公司用户身份登录才能访问该站点。

然后我使用App Registration --> Manifest 创建了新的应用角色。我已为自己分配了该角色,注销并重新登录,在 $_SERVER 变量中我找不到对该角色的任何引用。我可以找到我的用户名、令牌、principal_id 等,但没有任何引用我刚刚创建的 AppRole。

我的问题是,我如何获得登录用户分配的应用角色?我在此找到的唯一文档是针对 .net 或非常古老的 Azure 经典内容的。

有什么想法吗?

【问题讨论】:

    标签: php azure azure-active-directory azure-web-app-service


    【解决方案1】:

    我能想到的使用 Microsoft Graph API 进行此类操作的最简单方法。

    这是一个示例 Github Repo 供参考:

    https://github.com/Azure-Samples/active-directory-php-graphapi-directoryextensions-web

    要获取用户角色,您可以简单地调用下面的图形api:

    GET /me/memberOf
    or
    GET /users/{id | userPrincipalName}/memberOf
    

    您可以查看以下文档以获取更多参考:

    https://docs.microsoft.com/en-us/graph/api/user-list-memberof?view=graph-rest-1.0&tabs=http

    总的来说,流程是这样的:

    • 注册具有所需权限的应用程序
    • 使用上述创建应用程序从 Azure AD 获得授权
    • 使用token表单第2步,调用graph api获取用户角色
    • 继续验证

    示例响应如下所示:

    HTTP/1.1 200 OK
    Content-type: application/json
    
    {
      "value": [
        {
          "@odata.type": "#microsoft.graph.group",
          "id": "id-value",
          "createdDateTime": null,
          "description": "All users at the company",
          "displayName": "All Users",
          "groupTypes": [],
          "mailEnabled": false,
          "securityEnabled": true,
        }
      ]
    }
    

    希望对你有帮助。

    【讨论】:

    • 这看起来确实不错,感谢您的帮助!但是我不知道如何获取不记名令牌来进行此 API 调用:(这是我希望简单地从服务器变量中提取它的原因之一。我尝试使用的任何令牌都会得到 Access token validation failure. Invalid audience。但是这些API 调用对我来说是新事物。
    • 好的,我找到了这篇关于获取令牌的文章。我认为我走在正确的道路上。 docs.microsoft.com/en-us/graph/auth/… 但这引用了一个代码参数。我从哪里得到这个? The request body must contain the following parameter: 'code'.
    【解决方案2】:

    基于official documentation,定义的AppRole将在id_token中返回。

    要获取用户的 id_token,可以使用 Azure AD OAuth 2.0 authorization code flow,并将 openid 添加到范围。这里我使用postman来获取access_token和id_token:

    然后我可以得到 id_token

    通过分析id token,可以得到用户的角色:

    【讨论】:

    • 非常感谢您!使用变量$_SERVER['HTTP_X_MS_TOKEN_AAD_ID_TOKEN'] 已经被传递给我的网络应用程序,我所要做的就是用'.' 分解那个令牌,然后base64 解码中心那个,我可以看到你在那里看到的完全没有一个API 调用。这正是我在正确方向上需要的推动力。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-15
    • 2018-02-28
    • 2012-06-11
    • 1970-01-01
    • 1970-01-01
    • 2013-11-07
    • 2017-11-12
    相关资源
    最近更新 更多