使用MS Graph API获取共享日历所有者的UserId

时间:2018-09-20 09:48:58

标签: json microsoft-graph outlook-restapi

我想get the User's profile与我共享一个日历,但是此通话需要iduserPrincipalName

GET /users/{id | userPrincipalName}

共享日历仅返回:

{
    "id": "**********************************************=",
    "name": "Lala Lalala",
    "color": "auto",
    "changeKey": "Epg+nQ9k3kuTN16cfoLtwAAAsZgDvA==",
    "canShare": false,
    "canViewPrivateItems": false,
    "canEdit": true,
    "owner": {
        "name": "Lala Lalala",
        "address": "Lalala@outlook.com"
    }
}

那么我如何获得共享日历所有者的iduserPrincipalName

2 个答案:

答案 0 :(得分:1)

对于工作/学校帐户(Azure AD租户),userPrincipalName是所有者的地址(即alias@aad.domain.com):

"owner": {
    "name": "Lala Lalala",
    "address": "Lalala@outlook.com"
}

假设他们和您位于同一租户中,则可以使用GET https://graph.microsoft.com/v1.0/users/{owner.address}来检索他们的个人资料。

重要:但这不适用于个人帐户(MSA / Outlook.com)。我之所以仅提及这一点,是因为您的示例使用Lalala@outlook.com作为address

由于Outlook.com实际上是“单一用户”租户,因此您可以检索的用户就是您自己(/me)。就像您无法从另一家公司的AAD访问用户的数据一样,您也无法检索其他Outlook.com用户的配置文件。如果您考虑到我访问您的个人联系信息所涉及的价格昂贵问题,那么为什么要制定此规则是很有意义的。

答案 1 :(得分:0)

没有直接方法来实现您想要的。但是您可以通过两个步骤获取id或userPrincipalName:

  1. 获取所有者不是您的日历,就像您发布的回复一样{official docs):

    https://graph.microsoft.com/v1.0/me/calendars

  2. 使用所有者中的地址来调用以下API:

    https://graph.microsoft.com/v1.0/users/ {地址}

具有 id userPrincipalName 的响应:

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#users/$entity",
    "id": "5eec0ff7-b007-48c4-87ae-7cddb085f234",
    "businessPhones": [],
    "displayName": "...",
    "givenName": "...",
    "jobTitle": null,
    "mail": "test@test.com",
    "mobilePhone": "8612345678",
    "officeLocation": "No WorkSpace",
    "preferredLanguage": null,
    "surname": "s",
    "userPrincipalName": "test@test.com"
}