通过Laravel Azure ad oauth从Azure AD获取用户角色

时间:2020-02-19 06:10:30

标签: php laravel azure oauth azure-active-directory

我正在尝试通过使用Metrogistics / laravel-azure-ad-oauth社交插件来获得Azure AD的角色。

我从Azure收到了姓名,电子邮件和azure_id。但是我无法获得用户角色。

user: array:12 [
    "@odata.context" => "https://graph.microsoft.com/v1.0/$metadata#users/$entity"
    "businessPhones" => []
    "displayName" => "Test4"
    "givenName" => "Test4"
    "jobTitle" => null
    "mail" => null
    "mobilePhone" => null
    "officeLocation" => null
    "preferredLanguage" => null
    "surname" => null
    "userPrincipalName" => "test4@xyz.com"
    "id" => "xyz"
  ]

可以从Azure获得角色。 我的设置:

image1 image2 image3

2 个答案:

答案 0 :(得分:0)

根据我的研究,定义的AppRole将在id_token中返回。有关更多详细信息,请参阅official documentationdocument

enter image description here

关于如何获取用户的ID令牌,可以使用Azure AD OAuth 2.0 authorization code flow来实现它。在这里,我使用邮递员来获取access_token和id_token:

enter image description here

然后我可以获取id_token

enter image description here

通过分析id令牌,您可以获得用户的角色:

enter image description here


更新

关于如何为用户分配应用角色,请参考以下步骤

  1. 声明应用角色 enter image description here enter image description here

  2. 向用户分配角色

    a。在 Azure Active Directory 窗格中,从Azure Active Directory左侧导航菜单中选择企业应用程序

    b。选择所有应用程序以查看所有应用程序的列表。如果您没有在此处看到要显示的应用程序,请使用所有应用程序列表顶部的各种过滤器来限制列表,或向下滚动列表以找到您的应用程序。

    c。分配角色 enter image description here

答案 1 :(得分:0)

您拥有的是app role,顾名思义,它们属于应用程序。仅从Microsoft Graph查找用户对象不会提供这些对象。

是的,如另一个答案所示,它们将在用户登录后以id_token的形式提供给应用程序。

要独立于应用获取内容,请使用Get appRoleAssignment Api。