Поделиться через


Пример API, защищенного платформой согласия удостоверений Майкрософт

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

Давайте рассмотрим, как API, защищенный платформой идентификации Майкрософт, использует Microsoft identity consent framework. Мы используем API Microsoft Graph в качестве примера, поскольку оно наиболее полно использует систему получения согласия платформы идентификации Microsoft.

Соглашение об именовании разрешений

Команда Microsoft Graph создала соглашение об именовании для имен разрешений, чтобы упростить связь разрешения с доступом к ресурсу, который разрешение предоставляет. Имена разрешений Microsoft Graph соответствуют простому шаблону resource.operation.constraint . Двумя основными операциями являются Read и ReadWrite (включая обновление и удаление).

Элемент ограничения влияет на степень доступа, которым обладает ваше приложение в каталоге. Microsoft Graph поддерживает следующие ограничения:

  • Все предоставляют приложению разрешение на выполнение операций со всеми ресурсами указанного типа в каталоге.
  • Общая предоставляет приложению разрешение на выполнение операций с ресурсами, к которым другие пользователи предоставили доступ пользователю, вошедшему в систему.
  • AppFolder предоставляет приложению разрешение на чтение и запись файлов в выделенную папку в OneDrive. Это ограничение предоставляется только в объекте разрешений "Файлы " и допустимо только для учетных записей Майкрософт.
  • Если указать Нет ограничений, приложение может выполнять только операции с ресурсами, которыми владеет пользователь, вошедший в систему.

Доступ и операции с определенными ресурсами

Давайте рассмотрим некоторые разрешения или области для объекта пользователя в Microsoft Graph, чтобы узнать, как конструкторы API Майкрософт включили определенный доступ и операции с определенными ресурсами:

Разрешение Отображаемая строка Описание
User.Read Вход и чтение профиля пользователя Позволяет пользователям выполнять вход в приложение и позволяет приложению считывать профиль пользователей, выполнившего вход. Это также позволяет приложению считывать основные сведения о компании пользователей, выполнившего вход.
User.ReadWrite Доступ для чтения и записи к профилю пользователя Позволяет приложению считывать полный профиль пользователя, выполнившего вход. Приложение также позволяет приложению обновлять сведения о профиле пользователя, выполнившего вход, от их имени.

User.Read и User.ReadWrite существуют (в отличие от отдельного разрешения, такого как User.Access, которое не существует), чтобы приложения могли следовать принципу нулевого доверия и минимальных привилегий. Если у разработчика нет требования и кода для обновления профиля пользователя, приложение не запрашивает User.ReadWrite. Поэтому плохой субъект не может компрометировать приложение и использовать его для изменения данных.

Обратите внимание, что User.Read не просто предоставляет доступ к объекту пользователя. Каждое разрешение представляет определенный диапазон операций. Важно, чтобы разработчики и администраторы считывали описание разрешений, чтобы увидеть, какие разрешения разрешены. User.Readв дополнение к включению чтения полного профиля текущего пользователя приложение позволяет приложению просматривать основные сведения из объекта Organizations в Microsoft Graph.

Рассмотрим другое разрешение:

Разрешение Отображаемая строка Описание
User.ReadBasic.All Чтение базовых профилей всех пользователей Позволяет приложению просматривать базовый набор свойств профилей других пользователей организации от имени вошедшего пользователя. Включает отображаемое имя, имя и фамилию, электронный адрес, открытые расширения и фотографию. Позволяет приложению читать полный профиль пользователя, вошедшего в систему.

Диапазон операций, начинающихся User.ReadBasic.All с всего, что User.Read делает. Кроме того, вы можете получить доступ к отображаемому имени, имени, фамилии, адресу электронной почты, фотографии и открытым расширениям для других пользователей организации. Определенный диапазон работы позволяет приложениям иметь удобный интерфейс выбора пользователей и служит примером использования конструкторами API разрешения для обеспечения определенного диапазона работы.

Рассмотрим несколько дополнительных разрешений для объекта пользователя Microsoft Graph:

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

Как и User.Read , User.ReadWrite и User.Read.AllUser.ReadWrite.All являются отдельными разрешениями, которые позволяют приложению следовать принципу наименьшего уровня привилегий Нулевого доверия.

User.Read.All интересен, так как каждый пользователь в организации имеет эту возможность (например, открыть Outlook, перейти вверх и вниз по цепочке отчетов). Вы, как отдельный пользователь, можете видеть полный профиль пользователя каждого другого пользователя в вашей организации. Однако дизайнеры API Microsoft Graph решили, что только администраторы должны разрешить приложению выполнять ту же операцию, так как User.Read.All включает в себя организационную иерархию клиента. Если злоумышленник получит доступ к этой информации, он может организовать целевую фишинговую атаку, где фишинговое письмо выглядит как отправленное менеджером этого человека или его непосредственным руководителем.

User.ReadWrite.All — это мощный диапазон операций. Приложение с этим разрешением может обновлять или даже удалять каждого пользователя в клиенте. Как делегированное разрешение, когда пользователь взаимодействует с приложением, оно может выполнять только те действия, которые разрешены текущему пользователю. Обычные пользователи не могут обновлять или удалять других пользователей независимо от разрешений приложения. Однако, когда администратор клиента использует приложение, они могут выполнять эти операции. Если вы решите предоставить или запретить это разрешение, оцените приложение с учетом пользователя администратора клиента.

Учитывая возможности User.Read.All и User.ReadWrite.All, конструкторы API Microsoft Graph назначили эти разрешения как требование согласия администратора. Давайте добавим администратор? столбец в таблицу разрешений, чтобы указать, когда разрешение требует согласия администратора:

Разрешение Отображаемая строка Описание Администратор?
User.Read Вход и чтение профиля пользователя Позволяет пользователям выполнять вход в приложение и позволяет приложению считывать профиль пользователей, выполнившего вход. Это также позволяет приложению считывать основные сведения о компании пользователей, выполнившего вход. Нет
User.ReadWrite Доступ для чтения и записи к профилю пользователя Позволяет приложению считывать полный профиль пользователя, выполнившего вход. Приложение также позволяет приложению обновлять сведения о профиле пользователя, выполнившего вход, от их имени. Нет
User.ReadBasic.All Чтение базовых профилей всех пользователей Позволяет приложению просматривать базовый набор свойств профилей других пользователей организации от имени вошедшего пользователя. Включает отображаемое имя, имя и фамилию, электронный адрес, открытые расширения и фотографию. Позволяет приложению читать полный профиль пользователя, вошедшего в систему. Нет
User.Read.All Чтение полных профилей всех пользователей Позволяет приложению считывать полный набор свойств профилей и сведения о подчиненных и руководителях других пользователей в вашей организации от имени вошедшего пользователя. Да
User.ReadWrite.All Чтение и запись полных профилей всех пользователей Приложение сможет читать и изменять полный набор свойств профиля, отчеты и информацию о руководителях других пользователей в организации от имени вошедшего пользователя. Кроме того, приложение позволяет создавать и удалять пользователей и сбрасывать пароли пользователей от имени вошедшего пользователя. Да

Как показано в статье «Разрешения запроса, требующие согласия администратора», администраторы арендатора могут отменить требования и определить любые или все разрешения приложений в своем арендаторе как требующие согласия администратора. Создайте приложение, которое адекватно обрабатывает ситуацию, когда вы не получаете токен из запроса. Отсутствие согласия является одной из многих причин, по которым ваше приложение может не получить маркер.

Дальнейшие действия