Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure active directory 将Active Directory应用程序角色与社交帐户一起使用_Azure Active Directory_Msal - Fatal编程技术网

Azure active directory 将Active Directory应用程序角色与社交帐户一起使用

Azure active directory 将Active Directory应用程序角色与社交帐户一起使用,azure-active-directory,msal,Azure Active Directory,Msal,Azure Active Directory应用程序角色是否仅支持同一租约中的帐户 我正在尝试使用Azure Active Directory对我的租约、其他人和社交帐户上的用户进行身份验证,并能够手动分配不同的应用程序级别角色 我想要的是: 用户可以使用这些方法中的任何一种进行注册,我可以在Azure portal的企业应用程序的“用户和组”页面中看到它们(或者我可以邀请他们)。我会通过“添加用户/组”按钮分配应用程序角色(特定于我的应用程序的角色,例如工程师/技术员/住宅用户) 登录到我的

Azure Active Directory应用程序角色是否仅支持同一租约中的帐户

我正在尝试使用Azure Active Directory对我的租约、其他人和社交帐户上的用户进行身份验证,并能够手动分配不同的应用程序级别角色

我想要的是:
  • 用户可以使用这些方法中的任何一种进行注册,我可以在Azure portal的企业应用程序的“用户和组”页面中看到它们(或者我可以邀请他们)。我会通过“添加用户/组”按钮分配应用程序角色(特定于我的应用程序的角色,例如工程师/技术员/住宅用户)
  • 登录到我的应用程序时,我通过
    idTokenClaims.roles[]
结果是:
  • 这适用于已经在my Azure租约中的用户帐户。但对于其他Microsoft帐户(例如
    theirname@outlook.com
    或使用任何电子邮件地址创建的MS帐户),用户登录后不会出现在Azure portal中,除非我手动邀请他们。在邀请他们(并接受邀请)之后,我看到一个像
    theirname\u outlook.com\EXT\35;@mytenancy.onmicrosoft.com
    这样的用户。我可以将应用程序角色分配给此用户,但不会返回他们的
    idTokenClaims.roles[]
  • 其他社交账户(如Twitter、facebook)似乎根本不受支持
我还试了什么 我还调查了AD B2C,它让开发者能够更好地控制登录流程,并支持MS以外的其他社交帐户(看起来不错),但它似乎根本不支持应用程序角色

我是不是在尝试使用错误的工具来完成这项工作? 我想做的就是支持任何用户注册我的应用程序,并让管理员设置他们的应用程序特定角色

更新 我正在使用MSAL auth库,遵循

https://login.microsoftonline.com/Enter_the_Tenant_Id_here
应为以下内容之一:

  • 如果应用程序支持此组织目录中的帐户,请将此值替换为租户ID或租户名称。例如,contoso.microsoft.com
  • 如果应用程序支持任何组织目录中的帐户,请将此值替换为组织
  • 如果应用程序支持任何组织目录中的帐户和个人Microsoft帐户,请将此值替换为
    common
  • 若要将支持仅限于个人Microsoft帐户,请将此值替换为
    消费者
因为我想让它适用于任何社交帐户,所以我选择了
https://login.microsoftonline.com/common
。这显示了一个UI,允许您使用任何组织或个人MS帐户,或使用任何电子邮件地址注册个人MS帐户。但是我注意到为个人帐户返回的
objectId
与我在azure portal中手动邀请帐户时的id不同。我改为使用我的
TenantID
,效果不错。以前通过门户邀请的个人帐户可以登录。其他个人帐户出现错误,无法登录。现在将为这些个人帐户返回应用程序角色。这部分解决了我原来的问题,但我仍然有一些未解决的问题:

  • 此方法显示的UI稍有不同,不允许用户在此流中注册新的MS帐户
  • 我仍然无法使用其他oauth帐户,例如Twitter/Facebook。这些完全不支持应用程序角色吗
  • 上面引用的说明似乎不正确,很明显,一旦他们被邀请加入应用程序,就可以通过
    TenentID
    (而不是
    common
    )使用“任何组织目录中的帐户和个人Microsoft帐户”登录

    • 应用程序角色绝对支持来宾帐户。但是正如您所看到的,来宾帐户的id令牌似乎不包含
      角色
      声明,并且不清楚这是否是设计的。但是
      角色
      声明将出现在访问令牌中

      我认为您可以使用访问令牌,并且访问令牌还包含用户信息


      appRole
      当然支持社交帐户,您只需解析访问令牌,然后查看
      角色
      声明。是否有更新?您在此处使用了什么权限来获取令牌<代码>https://login.microsoftonline.com/common或
      /TenantId
      ?看我的update@rockgecko我使用
      /TenantId
      ,因为我需要将个人帐户添加到Azure ad以向帐户授予应用程序角色。