Azure active directory 如何使用Microsoft Graph API从用户配置文件中获取组织(租户)id

Azure active directory 如何使用Microsoft Graph API从用户配置文件中获取组织(租户)id,azure-active-directory,microsoft-graph-api,office-js,Azure Active Directory,Microsoft Graph Api,Office Js,我正在创建一个使用组织许可证销售的附加模块 我已经在外接程序上实现了身份验证方案。我目前正在请求用户。请阅读范围以确保使用Azure v2端点进行身份验证。要获取用户的信息,我正在查询 https://graph.microsoft.com/v1.0/me 为了正确测试用户的许可证,我需要提取用户组织的标识。然而,我从Grah请求中收到的用户信息是越来越少的。对于AAD帐户,架构如下所示: { "@odata.context": "https://graph.microsoft.com/v

我正在创建一个使用组织许可证销售的附加模块

我已经在外接程序上实现了身份验证方案。我目前正在请求
用户。请阅读
范围以确保使用Azure v2端点进行身份验证。要获取用户的信息,我正在查询

https://graph.microsoft.com/v1.0/me
为了正确测试用户的许可证,我需要提取用户组织的标识。然而,我从Grah请求中收到的用户信息是越来越少的。对于AAD帐户,架构如下所示:

{
  "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users/$entity",
  businessPhones: [],
  displayName: "FirstName LastName",
  givenName: "FirstName",
  id: "unique-id",
  jobTitle: null,
  mail: "First.LastName@COMPANYDOMAIN.COM",
  mobilePhone: null,
  officeLocation: null,
  preferredLanguage: null,
  surname: "LastName",
  userPrincipalName: "FILastName@COMPANYDOMAIN.COM"
}
如果我使用

https://graph.microsoft.com/BETA/me
我得到了更多的信息,但没有什么能帮助我在用户的组织上确定唯一的id

我是否需要使用不同的范围来获取用户组织的信息?如果没有,我可以依靠解析用户电子邮件中的域名作为用户组织的唯一id吗?我需要查询不同的API吗

更新:OAuth响应 如果有帮助,在用户使用AD进行身份验证后,我将收到以下响应:

{
    access_token: "eyJ0eXAiOiJKV1QiLCJub25jZSI6IkFRQUJBQUFBQUFEWDhHQ2k2SnM2U0s4MlRzRDJQYjdyN1VLTzdJSDJSLWpTcmpScU9..."
    expires_at: Fri May 18 2018 07: 18: 42 GMT - 0400(Eastern Daylight Time) {}
    expires_in: "3599"
    provider: "Microsoft"
    scope: "https://graph.microsoft.com/User.Read"
    session_state: "012f4565-31bb-..."
    state: "259309..."
    token_type: "Bearer"
}
更新:使用
https://graph.microsoft.com/BETA/me
更新:使用jwt.ms解码
访问\u令牌

如果没有其他办法,您可以解码访问令牌并获得
tid
声明。这是Azure AD租户的id

您可以在此处找到令牌中声明的文档:

例如,下面是它对
tid
的说明:

一个不可变的、不可重用的标识符,用于标识发出令牌的目录租户。您可以使用此值访问多租户应用程序中特定于租户的目录资源。例如,您可以使用此值在对Graph API的调用中标识租户


现在,这可能不是直接使用graph API,而是使获取组织的租户id变得非常简单。只需访问“{yourdomainname}/.well-known/openid配置”。返回的结构将具有租户id。例如,在浏览器中尝试此url:。

这似乎可行

GET https://graph.microsoft.com/v1.0/organization 
id属性是租户id


用户登录后,您应该获得一个Id令牌。包含租户Id的。@juunas您是指
访问\u令牌
?如何从中提取租户id?也许你想发布一个包含详细信息的完整答案?我是说id_令牌,在这种情况下它对你不可用吗?@juunas我用OAuth负载更新了答案。现在可以看到完整工作流的模式。广告用户确实有一个较长的配置文件,但没有
租户id
,我可以看到,如果你在那里解码访问令牌,你会在那里看到用户信息吗?非常适合首先请求域,检查它,最后请求管理员授权。否则,我将不得不对我的守护程序应用程序进行两次身份验证(另请参见)。这很有效,请注意共享您使用的请求主体的文档。这是一个GET请求。没有尸体。将更新答案
{
  "typ": "",
  "nonce": "",
  "alg": "",
  "x5t": "",
  "kid": "iBjL1Rcqzhiy4fpxIxdZqohM2Yk"
}.{
  "aud": "",
  "iss": "",
  "iat": "",
  "nbf": "",
  "exp": "",
  "acr": "",
  "aio": "",
  "amr": [
    "pwd"
  ],
  "app_displayname": "",
  "appid": "",
  "appidacr": "",
  "family_name": "",
  "given_name": "",
  "ipaddr": "",
  "name": "",
  "oid": "",
  "onprem_sid": "",
  "platf": "",
  "puid": "",
  "scp": "",
  "sub": "",
  "tid": "",
  "unique_name": "",
  "upn": "",
  "uti": "",
  "ver": "1.0"
}.[Signature]
GET https://graph.microsoft.com/v1.0/organization