Не удалось получить информацию о группе другого арендатора с помощью Microsoft Graph API - PullRequest
1 голос
/ 28 января 2020

Я создал две директории на портале Azure AD. В одном каталоге я зарегистрировал клиентское приложение и получил делегированные разрешения

  • User.Read
  • Directory.AccessAsUser.All
  • Directory.Read.All

Я также сделал его Multitenant для любого каталога Azure AD, чтобы использовать это приложение.

После успешного входа в систему я вызываю API (https://graph.microsoft.com/v1.0/me/memberOf) для получения информации о группах пользователя. Это работает только для пользователей в каталоге, где зарегистрировано приложение. Я получаю все подробности, такие как displayName et c для пользователя в каталоге, где зарегистрировано приложение.

Когда я вхожу через пользователя, принадлежащего другому арендатору (каталогу), вход в систему успешен, но я не получаю полные данные группы в ответе API (см. Ниже). Я получаю правильный идентификатор объекта (группы) обратно, но не другие детали.

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

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#directoryObjects",
    "value": [
        {
            "@odata.type": "#microsoft.graph.group",
            "id": "8bcd8779-8a74-4db7-83f0-8a5c5d076540",
            "deletedDateTime": null,
            "classification": null,
            "createdDateTime": null,
            "creationOptions": [],
            "description": null,
            "displayName": null,
            "groupTypes": [],
            "isAssignableToRole": null,
            "mail": null,
            "mailEnabled": null,
            "mailNickname": null,
            "onPremisesDomainName": null,
            "onPremisesLastSyncDateTime": null,
            "onPremisesNetBiosName": null,
            "onPremisesSamAccountName": null,
            "onPremisesSecurityIdentifier": null,
            "onPremisesSyncEnabled": null,
            "preferredDataLocation": null,
            "proxyAddresses": [],
            "renewedDateTime": null,
            "resourceBehaviorOptions": [],
            "resourceProvisioningOptions": [],
            "securityEnabled": null,
            "securityIdentifier": null,
            "visibility": null,
            "onPremisesProvisioningErrors": []
        }
    ]
}

Я использую реализацию Spring Security oauth2 с этими свойствами конфигурации (id, секретная маска)

azure:
  activedirectory:
    tenant-id: 66aeb78f-7a26-46c9-99ab-460c6309b21e
    active-directory-groups: Users
  client:
    client-id: 9618ac61-43ab-4c97-a9f1-769c91f48e08
    client-secret: DxndD0cBezR-AnrGuCH@?b1NpwtFj?47
    accessTokenUri: https://login.microsoftonline.com/common/oauth2/v2.0/token
    userAuthorizationUri: https://login.microsoftonline.com/common/oauth2/v2.0/authorize?prompt=select_account
    scope: user.read
  resource:
    userInfoUri: https://graph.microsoft.com/v1.0/me

Ответы [ 2 ]

1 голос
/ 28 января 2020

Когда единственным заполненным свойством является идентификатор объекта, вы, вероятно, находитесь в сценарии, описанном в Ограниченная информация, возвращаемая для недоступных элементов-членов .

Короче говоря, в то время как ваше приложение имеет разрешение на чтение того факта, что зарегистрированный пользователь является членом группы (благодаря User.Read ), он не имеет разрешение на чтение всех свойства этой группы.

Поскольку Directory.Read.All будет достаточно для чтения всех свойств группы, вероятный вывод состоит в том, что во втором арендаторе ваше приложение фактически не было предоставлено все три разрешения, которые вы перечислили, и им были предоставлены только User.Read .

Примечание. Всегда выбирайте разрешения с наименьшими привилегиями для вашего сценария. Directory.AccessAsUser.All следует по возможности избегать, поскольку это привилегированное разрешение most . Для описанного вами сценария вам может даже не понадобиться Directory.Read.All . Если вам нужен только доступ к основным сведениям о группе c (например, отображаемое имя и т. Д. c.), Попробуйте вместо этого GroupMember.Read.All .

0 голосов
/ 30 января 2020

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

Azure Регистрация приложений и корпоративных приложений

Разница между "корпоративными приложениями" и "регистрация приложения" в Azure

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...