【问题标题】:Graph API requests for guest users in Azure ADAzure AD 中来宾用户的图形 API 请求
【发布时间】:2017-02-07 16:48:19
【问题描述】:

我想知道如何在 Azure AD 中为来宾用户进行图形 API 调用。我可以使用给定here 的 API 示例为内部用户实现它,但相同的调用不适用于来宾用户。提出请求的方式有什么不同吗?

【问题讨论】:

  • 你到底是什么意思他们不工作?什么叫?
  • 我的意思是对这里描述的用户的图形 API 调用(msdn.microsoft.com/en-us/library/azure/ad/graph/api/…)。例如获取用户详细信息的 API 调用:graph.windows.net/<tenantName>/users/… 这适用于内部用户。但对于外部用户,它会返回 400 响应代码。
  • 除了状态码你应该检查响应正文,它可能有更多的细节。
  • 对我来说,您提到的查询适用于 api-version=1.6。
  • 您是否尝试使用他们的用户主体名称(登录名)或他们的对象 ID 来查找它们?因为他们的用户主体名称在你的目录中是不一样的,而且是不能在URL中使用的

标签: azure azure-ad-graph-api


【解决方案1】:

您租户中的来宾帐户的用户主体名称与其在其主租户中的 UPN 名称不同。您应该能够通过查询租户中的所有用户并找到具有“已修改”用户主体名称(通常带有“EXT”)的外部用户来看到这一点。

您可以在我们的演示租户here 中看到一个直接的示例

"userPrincipalName": "djayachandran.cw_mmm.com#EXT#@GraphDir1.onmicrosoft.com",

您似乎需要使用未更改旧 UPN 的其他属性(例如“邮件”属性)来查询这些用户。最终,您希望找到您感兴趣的用户的 ObjectId,并将其用作查找用户信息的键。您应该能够从登录用户的令牌中获取对象 ID。

如果这有帮助,请告诉我! 谢谢, 肖恩大不里士

【讨论】:

  • 我可以为具有对象 ID 的用户执行获取操作。但是认证后我将只有用户的用户名,那么如何使用 accessToken 获取对象 ID 呢?我遇到了与密码相关的所有 API 的问题。重置密码和更改密码不适用于我租户中的来宾用户,因为他们已经过身份验证,并且他们的密码存储在他们自己的租户中。那么问题是这些用户如何重置或更改他们的密码?
  • 外部用户的想法是他们的身份不是由您管理,而是由他们自己的组织管理。要重置密码,他们可以询问他们的管理员,或者,如果他们启用了自助密码重置,他们会重置自己的密码。
【解决方案2】:

@Shawn Tabrizi 的上述回答帮助我实现了我所需要的(获取登录用户的 Azure AD 组信息)。

为了从身份声明中获取用户 AD ObjectID,我使用了这个:

using System.Linq;
using System.Security.Claims;

namespace HealthcareEfficiencyService_webApp.Helpers
{
    public class ClaimsHelper
    {
        private readonly static string objectIdClaimsType = "http://schemas.microsoft.com/identity/claims/objectidentifier";

        public static string getAdObjectId(ClaimsIdentity claimsIdentity)
        {
            return claimsIdentity.Claims.FirstOrDefault(x => x.Type == objectIdClaimsType).Value;
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多