Microsoft Graph API - получение сведений о владельце группы и сведений о группе в Azure

В Azure я мог найти API для получения сведений о группе, как показано ниже

https://graph.microsoft.com/v1.0/groups

который даст мне все детали группы, как показано ниже

{  
  "value": [  
    {  
      "id": "/groups/53c765632095310385020001",  
      "name": "Administrators",  
      "description": "Administrators is a built-in group. Its membership is managed by the system. Microsoft Azure subscription administrators fall into this group.",  
      "builtIn": true,  
      "type": "system",  
      "externalId": null  
    },  
    {  
      "id": "/groups/53c765632095310385020002",  
      "name": "Developers",  
      "description": "Developers is a built-in group. Its membership is managed by the system. Signed-in users fall into this group.",  
      "builtIn": true,  
      "type": "system",  
      "externalId": null  
    },  
    {  
      "id": "/groups/53c765632095310385020003",  
      "name": "Guests",  
      "description": "Guests is a built-in group. Its membership is managed by the system. Unauthenticated users visiting the developer portal fall into this group.",  
      "builtIn": true,  
      "type": "system",  
      "externalId": null  
    }  
  ],  
  "count": 3,  
  "nextLink": null  
}  

но проблема в том, что мне нужны данные о владельце группы, а также сведения о группе. В настоящее время я вызываю другой API, как показано ниже, для получения сведений о владельце группы.

https://graph.microsoft.com/v1.0/groups/{groupId}/owners

Есть ли какой-либо API или любой другой способ, с помощью которого я могу получить данные о владельце группы вместе с информацией о группах в одном кадре в Azure

2 ответа

Решение

Microsoft Graph API поддерживает некоторые необязательные параметры запроса, такие как выбор, фильтрация, расширение, поиск и т. Д., Которые помогают контролировать, какие данные вы возвращаете в ответ на ваш запрос. Вы можете прочитать о них здесь

параметр расширения может быть полезен для вашего случая использования.

Я быстро опробовал запрос, подобный приведенному ниже, из Microsoft Graph Explorer, и он возвращает информацию о группе, а также коллекцию владельцев для каждой группы.

https://graph.microsoft.com/v1.0/groups?$expand=owners

Отказ от ответственности: Microsoft Docs для расширенного параметра имеет примечание, которое говорит что-то вроде

С ресурсами Azure AD, которые происходят из directoryObject, такими как пользователь и группа, $expand поддерживается только для бета-версии и обычно возвращает максимум 20 элементов для расширенного отношения.

Хотя вышеупомянутый запрос, который использует v1.0, работал нормально для меня, по крайней мере, из Graph Explorer. Поэтому сделайте как можно больше тестов (с большим количеством групп), прежде чем начинать полагаться на него. Я также обновлю в случае, если я найду более свежую документацию относительно того же самого.

Вот точный ответ, который я получил на запрос, который я упомянул выше. Он довольно большой, я просто включил 2 группы и удалил другие, чтобы вы поняли.

Важная часть заключается в том, чтобы заметить, что коллекция владельцев присутствует вместе с группами. Обратите внимание, что первая группа не имеет назначенных владельцев, но вторая группа имеет 2 пользователей в качестве владельцев.

ЗАПРОС

GET https://graph.microsoft.com/v1.0/groups?$expand=owners

ОТВЕТ

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#groups",
    "value": [
        {
            "id": "xxxx-redacted-49b4e13fcf0f",
            "deletedDateTime": null,
            "classification": null,
            "createdDateTime": "2018-09-26T04:41:10Z",
            "creationOptions": [],
            "description": null,
            "displayName": "Business",
            "groupTypes": [],
            "mail": null,
            "mailEnabled": false,
            "mailNickname": "xxxx-redacted-88df-adf033b7f545",
            "onPremisesLastSyncDateTime": null,
            "onPremisesSecurityIdentifier": null,
            "onPremisesSyncEnabled": null,
            "preferredDataLocation": null,
            "proxyAddresses": [],
            "renewedDateTime": "2018-09-26T04:41:10Z",
            "resourceBehaviorOptions": [],
            "resourceProvisioningOptions": [],
            "securityEnabled": true,
            "visibility": null,
            "onPremisesProvisioningErrors": [],
            "owners": []
        },
        {
            "id": "xxxx-redacted-9316-a5acea4412d8",
            "deletedDateTime": null,
            "classification": null,
            "createdDateTime": "2018-09-26T04:19:29Z",
            "creationOptions": [],
            "description": null,
            "displayName": "DevOps",
            "groupTypes": [],
            "mail": null,
            "mailEnabled": false,
            "mailNickname": "xxxx-redacted-4f18-b2b1-e5a7b80d19ea",
            "onPremisesLastSyncDateTime": null,
            "onPremisesSecurityIdentifier": null,
            "onPremisesSyncEnabled": null,
            "preferredDataLocation": null,
            "proxyAddresses": [],
            "renewedDateTime": "2018-09-26T04:19:29Z",
            "resourceBehaviorOptions": [],
            "resourceProvisioningOptions": [],
            "securityEnabled": true,
            "visibility": null,
            "onPremisesProvisioningErrors": [],
            "owners": [
                {
                    "@odata.type": "#microsoft.graph.user",
                    "id": "xxxx-redacted-8000-8cb9f0d497c9",
                    "deletedDateTime": null,
                    "accountEnabled": true,
                    "ageGroup": null,
                    "businessPhones": [],
                    "city": "xxxx",
                    "companyName": null,
                    "consentProvidedForMinor": null,
                    "country": "xxxx",
                    "createdDateTime": null,
                    "department": "Human Resources",
                    "displayName": "Adam G",
                    "employeeId": null,
                    "faxNumber": null,
                    "givenName": "Adam",
                    "jobTitle": "Senior Human Resource Manager",
                    "legalAgeGroupClassification": null,
                    "mail": null,
                    "mailNickname": "adamg",
                    "mobilePhone": "xxxx",
                    "onPremisesDistinguishedName": null,
                    "onPremisesDomainName": null,
                    "onPremisesImmutableId": null,
                    "onPremisesLastSyncDateTime": null,
                    "onPremisesSecurityIdentifier": null,
                    "onPremisesSamAccountName": null,
                    "onPremisesSyncEnabled": null,
                    "onPremisesUserPrincipalName": null,
                    "otherMails": [],
                    "passwordPolicies": "DisablePasswordExpiration",
                    "passwordProfile": null,
                    "officeLocation": "131/1105",
                    "postalCode": "98052",
                    "preferredLanguage": "en-US",
                    "proxyAddresses": [],
                    "refreshTokensValidFromDateTime": "2018-09-19T03:34:39Z",
                    "imAddresses": [],
                    "isResourceAccount": null,
                    "showInAddressList": null,
                    "state": "MH",
                    "streetAddress": "xxxxxxxe",
                    "surname": "Gily",
                    "usageLocation": "US",
                    "userPrincipalName": "adamg@xxxxx.onmicrosoft.com",
                    "userType": "Member",
                    "assignedLicenses": [],
                    "assignedPlans": [],
                    "onPremisesProvisioningErrors": [],
                    "onPremisesExtensionAttributes": {
                        "extensionAttribute1": null,
                        "extensionAttribute2": null,
                        "extensionAttribute3": null,
                        "extensionAttribute4": null,
                        "extensionAttribute5": null,
                        "extensionAttribute6": null,
                        "extensionAttribute7": null,
                        "extensionAttribute8": null,
                        "extensionAttribute9": null,
                        "extensionAttribute10": null,
                        "extensionAttribute11": null,
                        "extensionAttribute12": null,
                        "extensionAttribute13": null,
                        "extensionAttribute14": null,
                        "extensionAttribute15": null
                    },
                    "provisionedPlans": []
                },
                {
                    "@odata.type": "#microsoft.graph.user",
                    "id": "xxxx-redacted-4824-8013-4325f68e275d",
                    "deletedDateTime": null,
                    "accountEnabled": true,
                    "ageGroup": null,
                    "businessPhones": [],
                    "city": null,
                    "companyName": null,
                    "consentProvidedForMinor": null,
                    "country": null,
                    "createdDateTime": null,
                    "department": null,
                    "displayName": "groupownertest",
                    "employeeId": null,
                    "faxNumber": null,
                    "givenName": null,
                    "jobTitle": null,
                    "legalAgeGroupClassification": null,
                    "mail": null,
                    "mailNickname": "groupownertest",
                    "mobilePhone": null,
                    "onPremisesDistinguishedName": null,
                    "onPremisesDomainName": null,
                    "onPremisesImmutableId": null,
                    "onPremisesLastSyncDateTime": null,
                    "onPremisesSecurityIdentifier": null,
                    "onPremisesSamAccountName": null,
                    "onPremisesSyncEnabled": null,
                    "onPremisesUserPrincipalName": null,
                    "otherMails": [],
                    "passwordPolicies": null,
                    "passwordProfile": null,
                    "officeLocation": null,
                    "postalCode": null,
                    "preferredLanguage": null,
                    "proxyAddresses": [],
                    "refreshTokensValidFromDateTime": "2019-01-23T18:56:43Z",
                    "imAddresses": [],
                    "isResourceAccount": null,
                    "showInAddressList": null,
                    "state": null,
                    "streetAddress": null,
                    "surname": null,
                    "usageLocation": null,
                    "userPrincipalName": "groupownertest@XXXXX.onmicrosoft.com",
                    "userType": "Member",
                    "assignedLicenses": [],
                    "assignedPlans": [],
                    "onPremisesProvisioningErrors": [],
                    "onPremisesExtensionAttributes": {
                        "extensionAttribute1": null,
                        "extensionAttribute2": null,
                        "extensionAttribute3": null,
                        "extensionAttribute4": null,
                        "extensionAttribute5": null,
                        "extensionAttribute6": null,
                        "extensionAttribute7": null,
                        "extensionAttribute8": null,
                        "extensionAttribute9": null,
                        "extensionAttribute10": null,
                        "extensionAttribute11": null,
                        "extensionAttribute12": null,
                        "extensionAttribute13": null,
                        "extensionAttribute14": null,
                        "extensionAttribute15": null
                    },
                    "provisionedPlans": []
                }
            ]
        }
    ]
}

ОБНОВЛЕНИЕ 1 (чтобы ответить на вопросы из комментариев)

члены и владельцы являются навигационными свойствами / отношениями, а не прямыми свойствами для групп. Вы можете расширить только по одному за раз. Я покажу вам 3 быстрых вызова API, которые можно протестировать в Microsoft Graph Explorer.

раскрыть только участников - это работает, как ожидается, и возвращает группы, а также членов для каждой группы.

GET https://graph.microsoft.com/v1.0/groups?$expand=members

Развернуть только владельцев - это работает, как ожидается, и возвращает группы, а также владельцев для каждой группы. Пример ответа показан выше.

GET https://graph.microsoft.com/v1.0/groups?$expand=owners

расширить как членов, так и владельцев в один звонок

GET https://graph.microsoft.com/v1.0/groups?$expand=members,owners

ОТВЕТ

Вы можете развернуть только одно навигационное свойство за один вызов. Посмотрите на сообщение об ошибке, оно довольно интуитивно понятно:

{
    "error": {
        "code": "Request_BadRequest",
        "message": "The result of parsing $expand contained at least 2 items, but the maximum allowed is 1.",
        "innerError": {
            "request-id": "119cf794-af56-48a0-b415-4d52c2e60e98",
            "date": "2019-02-13T02:57:13"
        }
    }
}

ОБНОВЛЕНИЕ 2 (чтобы ответить на запрос о расширении и выбрать вместе из комментариев)

Я не думаю, что вы сможете выбрать $ только несколько столбцов вместе с $ expand в запросе. Это, кажется, известное ограничение. Смотрите две ссылки ниже для большего контекста

  1. Ограничения параметров запроса - Microsoft Docs
  2. Еще один пост SO В частности, в этом посте SO посмотрите комментарий от Marc LaFleur и ответ от Dan Kershaw - MSFT

Не уверен, что это было исправлено, но я смог ограничить вывод расширенного запроса владельца с помощью этого

      https://graph.microsoft.com/v1.0/groups/?$select=displayName&$filter=resourceProvisioningOptions/Any(x:x eq 'Team')&$expand=owners($select=id,department)

примечание: это было сделано для извлечения определенных групп, принадлежащих Teams, но это всего лишь фильтр, я думаю, что он должен работать и в противном случае.

Другие вопросы по тегам