Azure AD中来宾用户的图形API请求

Azure AD中来宾用户的图形API请求,azure,azure-ad-graph-api,Azure,Azure Ad Graph Api,我想知道我们如何在Azure AD中为来宾用户调用graph API。我能够使用给出的API示例为内部用户实现它,但相同的调用不适用于来宾用户。请求的方式有什么不同吗?您的租户中的来宾帐户的用户主体名称将不同于其家庭租户中的UPN。通过查询租户中的所有用户,并查找具有“修改”用户主体名称(通常带有“EXT”)的外部用户,您应该能够看到这方面的证据 你可以在我们的演示中看到一个直接的例子 似乎您需要使用其他属性查询这些用户,而这些属性的旧UPN没有更改,例如“mail”属性。最终,您希望找到您感兴

我想知道我们如何在Azure AD中为来宾用户调用graph API。我能够使用给出的API示例为内部用户实现它,但相同的调用不适用于来宾用户。请求的方式有什么不同吗?

您的租户中的来宾帐户的用户主体名称将不同于其家庭租户中的UPN。通过查询租户中的所有用户,并查找具有“修改”用户主体名称(通常带有“EXT”)的外部用户,您应该能够看到这方面的证据

你可以在我们的演示中看到一个直接的例子

似乎您需要使用其他属性查询这些用户,而这些属性的旧UPN没有更改,例如“mail”属性。最终,您希望找到您感兴趣的用户的ObjectId,并将其用作查找用户信息的密钥。您应该能够从登录用户的令牌中获取对象id

让我知道这是否有帮助! 谢谢
Shawn Tabrizi

@Shawn Tabrizi上面的回答帮助我实现了我所需要的(为登录用户获取Azure广告群信息)

为了从身份声明中获取用户AD ObjectID,我使用了以下方法:

使用System.Linq;
使用System.Security.Claims;
命名空间HealthcareEfficiencyService_webApp.Helpers
{
公共类索赔人
{
私有只读静态字符串ObjectdClaimsType=”http://schemas.microsoft.com/identity/claims/objectidentifier";
公共静态字符串getAdObjectId(ClaimsIdentity ClaimsIdentity)
{
返回claimsIdentity.Claims.FirstOrDefault(x=>x.Type==ObjectdClaimsType).Value;
}
}
}

你说他们不工作是什么意思?什么调用?我指的是这里描述的对用户的graph API调用()。例如,获取用户详细信息的API调用:这在内部用户的情况下有效。但是如果是外部用户,它会返回400响应代码。除了状态代码之外,您还应该检查响应正文,它可能会有更多的详细信息。对于我来说,您提到的查询适用于api版本=1.6。您是否尝试使用用户主体名称(登录名)或对象id查找它们?由于它们的用户主体名称在您的目录中不相同,并且不能在URL中使用,因此我可以使用对象ID为用户执行get操作。但是在身份验证后,我将只拥有用户的用户名,因此如何使用accessToken获取对象ID?我面临着与密码相关的所有API的问题。重置密码和更改密码对my tenant中的来宾用户无效,因为他们已通过身份验证,并且他们的密码存储在自己的租户中。因此,问题是这些用户如何重置或更改密码?外部用户的想法是,他们的身份不是由您管理的,而是由他们自己的组织管理的。要重置密码,他们可以询问管理员,或者,如果启用自助密码重置,则可以重置自己的密码。
"userPrincipalName": "djayachandran.cw_mmm.com#EXT#@GraphDir1.onmicrosoft.com",