Вызов API из другого API

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

Когда пользователь управляет пользовательским интерфейсом приложения, приложение может использовать делегированное разрешение, чтобы API знал, какой пользователь от имени приложения работает. Он проверял утверждения субъекта (вложенные) или идентификатор объекта (oid) и утверждения идентификатора клиента (tid) в маркере доступа, который приложение предоставляет при вызове API. API не будет полагаться на ненадежное приложение, которое является просто вызовом, поступающим откуда-то в сети. Вместо этого он проверяет маркер, чтобы убедиться, что API работает только от имени пользователя приложения, проверенного идентификатором Microsoft Entra.

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

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

Для повышения безопасности исходный API получает делегированный маркер доступа к разрешениям для предоставления API внизу при выполнении вызова исходного API. Давайте рассмотрим, как это работает.

Клиентское приложение получает маркер доступа для вызова исходного API

На следующей схеме показаны клиентское приложение слева и исходный API справа.

На схеме показан клиентский приложение с маркерами идентификатора и доступа слева и исходным API, которым требуется авторизация справа.

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

Клиентское приложение предоставляет маркер доступа к исходному API

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

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

На анимированной схеме показаны две схемы с переходом движения между первой и второй диаграммой. Название первой схемы: клиентское приложение получило маркер доступа для вызова исходного API. Подзаголовок первой схемы: клиентское приложение имеет маркер A, который позволяет ему работать от имени пользователя, определенного в маркере для вызова исходного API. Первые компоненты схемы: представление облака отображается в верхнем центре слайда, заключив значок идентификатора Microsoft Entra. В левом нижнем углу прямоугольник представляет клиентское приложение. Под прямоугольником клиентского приложения находятся две шестнадцатеричные фигуры с метками "ID" и "A", представляющие маркеры идентификатора и доступа. В правом нижнем углу значок куба, облачная фигура и значок мира представляют исходный API. Слева квадратная метка фигуры — "Требуется авторизация". Стрелка соединяет фигуры слева с фигурами справа. Второй заголовок схемы: клиентское приложение предоставляет маркер доступа к исходному API. Второй компонент схемы: представление облака отображается в верхнем центре слайда, включающего значок идентификатора Microsoft Entra. В левом нижнем углу прямоугольник представляет клиентское приложение. Под прямоугольником клиентского приложения находится шестнадцатеричная фигура с меткой ID, представляющей маркер идентификатора. В правом нижнем углу значок куба, облачная фигура и значок мира представляют исходный API. Слева квадратная метка фигуры — "Требуется авторизация". Слева — это шестнадцатеричная фигура с меткой "A", представляющая маркер доступа. Стрелка соединяет фигуры слева с фигурами справа.

Исходный API выполняет проверку маркеров и принудительное применение

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

Анимированная схема показывает клиентское приложение с маркером идентификатора слева, предоставляя маркер доступа исходному API справа.

На анимированной схеме показаны две схемы с переходом движения между первой и второй диаграммой. Название первой схемы: клиентское приложение предоставляет маркер доступа к исходному API. Первые компоненты схемы: представление облака отображается в верхнем центре слайда, заключив значок идентификатора Microsoft Entra. В левом нижнем углу прямоугольник представляет клиентское приложение. Под прямоугольником клиентского приложения находится шестнадцатеричная фигура с меткой ID, представляющей маркер идентификатора. В правом нижнем углу значок куба, облачная фигура и значок мира представляют исходный API. Слева квадратная метка фигуры — "Требуется авторизация". Слева — это шестнадцатеричная фигура с меткой "A", представляющая маркер доступа. Стрелка соединяет фигуры слева с фигурами справа. Второй заголовок схемы: Исходный API выполняет проверку маркеров и принудительное применение. Если все хорошо, API продолжает и обслуживает запрос. Второй компонент схемы: представление облака отображается в верхнем центре слайда, включающего значок идентификатора Microsoft Entra. В левом нижнем углу прямоугольник представляет клиентское приложение. Под прямоугольником клиентского приложения находится шестнадцатеричная фигура с меткой ID, представляющей маркер идентификатора. В правом нижнем углу значок куба, облачная фигура и значок мира представляют исходный API. Стрелка соединяет фигуры слева с фигурами справа. Над стрелкой справа и под облачной фигурой является шестнадцатеричная фигура с меткой "A", представляющей маркер доступа.

Исходный API не может использовать маркер доступа для вызова НИЖЕстоящего API

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

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

На анимированной схеме показаны две схемы с переходом движения между первой и второй диаграммой. Заголовок первой схемы: Исходный API хочет вызвать подчиненный API. Первые компоненты схемы: представление облака отображается в верхнем центре слайда, заключив значок идентификатора Microsoft Entra. В левом нижнем углу прямоугольник представляет клиентское приложение. Под прямоугольником клиентского приложения находится шестнадцатеричная фигура с меткой ID, представляющей маркер идентификатора. В нижней середине значок куба, облачная фигура и значок мира представляют исходный API. Стрелка соединяет фигуры слева с фигурами в середине. Над стрелкой слева и под облачной фигурой является шестнадцатеричная фигура С меткой "A", представляющая маркер доступа. Второй заголовок схемы: исходный API не может использовать маркер для вызова НИЖЕстоящего API. Второй компонент схемы: представление облака отображается в верхнем центре слайда, включающего значок идентификатора Microsoft Entra. В левом нижнем углу прямоугольник представляет клиентское приложение. Под прямоугольником клиентского приложения находится шестнадцатеричная фигура с меткой ID, представляющей маркер идентификатора. В нижней середине значок куба, облачная фигура и значок мира представляют исходный API. Стрелка соединяет фигуры слева с фигурами в середине. Над стрелкой слева и под облачной фигурой является шестнадцатеричная фигура С меткой "A", представляющая маркер доступа. В правом нижнем углу значок с фигурой куба, облачная фигура и значок мира представляют ПОДЧИНЕННЫй API. Слева квадратная метка фигуры — "Требуется авторизация". Стрелка подключает фигуры в середине к фигурам справа.

Исходный API возвращается к идентификатору Microsoft Entra

В приведенной ниже анимации исходный API должен вернуться к идентификатору Microsoft Entra. Он должен иметь маркер доступа для вызова НИЖЕстоящего API от имени пользователя.

Анимированная схема показывает клиентское приложение, предоставляющее маркер доступа исходному API, которому требуется проверка от идентификатора Microsoft Entra для вызова НИЖЕстоящего API.

На анимированной схеме показаны две схемы с переходом движения между первой и второй диаграммой. Заголовок первой схемы: исходный API не может использовать маркер для вызова нижестоящего API. Первые компоненты схемы: представление облака отображается в верхнем центре слайда, заключив значок идентификатора Microsoft Entra. В левом нижнем углу прямоугольник представляет клиентское приложение. Под прямоугольником клиентского приложения находится шестнадцатеричная фигура с меткой ID, представляющей маркер идентификатора. В нижней середине значок куба, облачная фигура и значок мира представляют исходный API. Стрелка соединяет фигуры слева с фигурами в середине. Над стрелкой слева и под облачной фигурой является шестнадцатеричная фигура С меткой "A", представляющая маркер доступа. В правом нижнем углу значок с фигурой куба, облачная фигура и значок мира представляют ПОДЧИНЕННЫй API. Слева квадратная метка фигуры — "Требуется авторизация". Стрелка подключает фигуры в середине к фигурам справа. Второй заголовок схемы: исходный API возвращается к идентификатору Microsoft Entra. Второй подзаголовок схемы: требуется маркер доступа для вызова НИЖЕстоящего API от имени пользователя. Второй компонент схемы: представление облака отображается в верхнем центре слайда, включающего значок идентификатора Microsoft Entra. В левом нижнем углу прямоугольник представляет клиентское приложение. Под прямоугольником клиентского приложения находится шестнадцатеричная фигура с меткой ID, представляющей маркер идентификатора. В нижней середине значок куба, облачная фигура и значок мира представляют исходный API. Стрелка соединяет фигуры слева с фигурами в середине. Над стрелкой слева и под облачной фигурой является шестнадцатеричная фигура С меткой "A", представляющая маркер доступа. Над фигурами исходного API стрелка подключает их к облачной фигуре Microsoft Entra. В правом нижнем углу значок с фигурой куба, облачная фигура и значок мира представляют ПОДЧИНЕННЫй API. Слева квадратная метка фигуры — "Требуется авторизация". Стрелка подключает фигуры в середине к фигурам справа.

Следующая анимация показывает исходный API, предоставляющий маркер, полученный исходным API от клиентского приложения и учетных данных клиента ИСХОДНОго API.

Анимированная схема показывает клиентское приложение, предоставляющее маркер доступа исходному API, который получает проверку от идентификатора Microsoft Entra для вызова НИЖЕстоящего API.

На анимированной схеме показаны две схемы с переходом движения между первой и второй диаграммой. Заголовок первой схемы: исходный API возвращается к идентификатору Microsoft Entra. Подзаголовок первой схемы: требуется маркер доступа для вызова НИЖЕстоящего API от имени пользователя. Первые компоненты схемы: представление облака отображается в верхнем центре слайда, заключив значок идентификатора Microsoft Entra. В левом нижнем углу прямоугольник представляет клиентское приложение. Под прямоугольником клиентского приложения находится шестнадцатеричная фигура с меткой ID, представляющей маркер идентификатора. В нижней середине значок куба, облачная фигура и значок мира представляют исходный API. Стрелка соединяет фигуры слева с фигурами в середине. Над стрелкой слева и под облачной фигурой является шестнадцатеричная фигура С меткой "A", представляющая маркер доступа. Над фигурами исходного API стрелка подключает их к облачной фигуре Microsoft Entra. В правом нижнем углу значок с фигурой куба, облачная фигура и значок мира представляют ПОДЧИНЕННЫй API. Слева квадратная метка фигуры — "Требуется авторизация". Стрелка подключает фигуры в середине к фигурам справа. Второй заголовок схемы: исходный API возвращается к идентификатору Microsoft Entra. Второй подзаголовок схемы: предоставляет маркер из клиентского приложения и учетные данные для исходного API. Второй компонент схемы: представление облака отображается в верхнем центре слайда, включающего значок идентификатора Microsoft Entra. В левом нижнем углу прямоугольник представляет клиентское приложение. Под прямоугольником клиентского приложения находится шестнадцатеричная фигура с меткой ID, представляющей маркер идентификатора. В нижней середине значок куба, облачная фигура и значок мира представляют исходный API. Стрелка соединяет фигуры слева с фигурами в середине. Над фигурами исходного API стрелка подключает их к облачной фигуре Microsoft Entra. Слева от этой стрелки слева и ниже облачной фигуры является шестнадцатеричной фигурой с меткой "A", представляющей маркер доступа. Под маркером доступа является фигура ключа. В правом нижнем углу значок с фигурой куба, облачная фигура и значок мира представляют ПОДЧИНЕННЫй API. Слева квадратная метка фигуры — "Требуется авторизация". Стрелка подключает фигуры в середине к фигурам справа.

Идентификатор Microsoft Entra проверка для таких действий, как согласие или принудительное применение условного доступа. Возможно, вам придется вернуться к вызывающей клиенту и указать причину, по которой не удается получить маркер. Обычно вы используете процесс вызова утверждений, чтобы вернуться в вызывающее приложение с информацией о том, что согласие не получено (например, связано с политиками условного доступа).

Идентификатор Microsoft Entra выполняет проверка

В следующей анимации идентификатор Microsoft Entra выполняет свои проверка. Если все в порядке, идентификатор Microsoft Entra будет выдавать маркер доступа к исходному API для вызова НИЖЕстоящего API от имени пользователя.

На анимированной схеме показан исходный API, предоставляющий маркер доступа нижнему API после проверки с помощью идентификатора Microsoft Entra.

На анимированной схеме показаны две схемы с переходом движения между первой и второй диаграммой. Заголовок первой схемы: исходный API возвращается к идентификатору Microsoft Entra. Подзаголовок первой схемы: предоставляет маркер из клиентского приложения и учетные данные для исходного API. Первые компоненты схемы: представление облака отображается в верхнем центре слайда, заключив значок идентификатора Microsoft Entra. В левом нижнем углу прямоугольник представляет клиентское приложение. Под прямоугольником клиентского приложения находится шестнадцатеричная фигура с меткой ID, представляющей маркер идентификатора. В нижней середине значок куба, облачная фигура и значок мира представляют исходный API. Стрелка соединяет фигуры слева с фигурами в середине. Над фигурами исходного API стрелка подключает их к облачной фигуре Microsoft Entra. Слева от этой стрелки слева и ниже облачной фигуры является шестнадцатеричной фигурой с меткой "A", представляющей маркер доступа. Под маркером доступа является фигура ключа. В правом нижнем углу значок с фигурой куба, облачная фигура и значок мира представляют ПОДЧИНЕННЫй API. Слева квадратная метка фигуры — "Требуется авторизация". Стрелка подключает фигуры в середине к фигурам справа. Второй заголовок схемы: идентификатор Microsoft Entra ID проверка условного доступа, согласия и т. д. Второй подзаголовок схемы: Исходный API получает свой собственный маркер доступа для вызова НИЖЕстоящего API от имени пользователя, выполнившего вход в клиентское приложение. Второй компонент схемы: представление облака отображается в верхнем центре слайда, включающего значок идентификатора Microsoft Entra. В левом нижнем углу прямоугольник представляет клиентское приложение. Под прямоугольником клиентского приложения находится шестнадцатеричная фигура с меткой ID, представляющей маркер идентификатора. В нижней середине значок куба, облачная фигура и значок мира представляют исходный API. Стрелка соединяет фигуры слева с фигурами в середине. Над фигурами исходного API стрелка подключает их к облачной фигуре Microsoft Entra. В правом нижнем углу значок с фигурой куба, облачная фигура и значок мира представляют ПОДЧИНЕННЫй API. Слева квадратная метка фигуры — "Требуется авторизация". Стрелка подключает фигуры в середине к фигурам справа. Над этой стрелкой справа от исходных фигур API является шестнадцатеричная фигура с меткой "A", представляющей маркер доступа.

Исходный API имеет контекст пользователя с потоком On-Behalf-Of

В приведенной ниже анимации показан процесс потока On-Behalf-Of (OBO), который позволяет API продолжать использовать контекст пользователя при вызове НИЖЕстоящего API.

На анимированной схеме показан исходный API, предоставляющий маркер доступа нижестоящему API.

На анимированной схеме показаны две схемы с переходом движения между первой и второй диаграммой. Заголовок первой схемы: процесс потока on-Behalf-Of позволяет исходному API продолжать иметь контекст пользователя при вызове НИЖЕстоящего API. Первые компоненты схемы: в левом нижнем углу прямоугольник представляет клиентское приложение. Под прямоугольником клиентского приложения находится шестнадцатеричная фигура с меткой ID, представляющей маркер идентификатора. В нижней середине значок куба, облачная фигура и значок мира представляют исходный API. Стрелка соединяет фигуры слева с фигурами в середине. В правом нижнем углу значок с фигурой куба, облачная фигура и значок мира представляют ПОДЧИНЕННЫй API. Слева квадратная метка фигуры — "Требуется авторизация". Стрелка подключает фигуры в середине к фигурам справа. Над этой стрелкой справа от исходных фигур API является шестнадцатеричная фигура с меткой "A", представляющей маркер доступа. Второй заголовок схемы: процесс потока on-Behalf-Of позволяет исходному API продолжать иметь контекст пользователя при вызове НИЖЕстоящего API. Второй компонент схемы: в левом нижнем левом слева значок куба, облачная фигура и значок мира представляют исходный API. В правом нижнем углу значок с фигурой куба, облачная фигура и значок мира представляют ПОДЧИНЕННЫй API. Слева квадратная метка фигуры — "Требуется авторизация". Стрелка соединяет фигуры слева с фигурами справа. Над этой стрелкой справа от исходных фигур API является шестнадцатеричная фигура с меткой "A", представляющей маркер доступа.

Исходный API вызывает подчиненный API

В следующей анимации мы вызываем ПОДЧИНЕННЫЙ API. Маркер, полученный нижестоящим API, будет иметь соответствующее утверждение аудитории (aud), указывающее нижестоящий API.

Анимированная схема показывает подчиненный API, проверяющий маркер доступа из исходного API.

На анимированной схеме показаны две схемы с переходом движения между первой и второй диаграммой. Заголовок первой схемы: процесс потока on-Behalf-Of позволяет исходному API продолжать иметь контекст пользователя при вызове НИЖЕстоящего API. Первые компоненты схемы: в левом нижнем левом слева значок куба, облачная фигура и значок мира представляют исходный API. В правом нижнем углу значок с фигурой куба, облачная фигура и значок мира представляют ПОДЧИНЕННЫй API. Слева квадратная метка фигуры — "Требуется авторизация". Стрелка соединяет фигуры слева с фигурами справа. Над этой стрелкой справа от исходных фигур API является шестнадцатеричная фигура с меткой "A", представляющей маркер доступа. Второй заголовок схемы: вызывается нижестоящий API. Второй подзаголовок схемы: маркер, который получает подчиненный API, имеет правильные утверждения для идентификации пользователя клиентского приложения. Второй компонент схемы: в левом нижнем левом слева значок куба, облачная фигура и значок мира представляют исходный API. В правом нижнем углу значок с фигурой куба, облачная фигура и значок мира представляют ПОДЧИНЕННЫй API. Слева квадратная метка фигуры — "Требуется авторизация". Стрелка соединяет фигуры слева с фигурами справа. Над этой стрелкой слева от требуемой авторизации фигурой является шестнадцатеричная фигура С меткой "A", представляющая маркер доступа.

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

Лучший вариант: исходный API выполняет поток on-Behalf-Of

Эта последняя анимация показывает, что оптимальным вариантом является исходный API для выполнения потока On-Behalf-Of (OBO). Если ПОДЧИНЕННЫй API получает правильный маркер, он сможет правильно реагировать.

Анимированная схема показывает подчиненный API, получая маркер доступа из исходного API.

На анимированной схеме показаны две схемы с переходом движения между первой и второй диаграммой. Заголовок первой схемы: вызывается нижестоящий API. Подзаголовок первой диаграммы: маркер, который получает подчиненный API, имеет правильные утверждения для идентификации пользователя клиентского приложения. Первые компоненты схемы: в левом нижнем левом слева значок куба, облачная фигура и значок мира представляют исходный API. В правом нижнем углу значок с фигурой куба, облачная фигура и значок мира представляют ПОДЧИНЕННЫй API. Слева квадратная метка фигуры — "Требуется авторизация". Стрелка соединяет фигуры слева с фигурами справа. Над этой стрелкой слева от требуемой авторизации фигурой является шестнадцатеричная фигура С меткой "A", представляющая маркер доступа. Второй заголовок схемы: лучший вариант — для исходного API выполнять "от имени потока". Если ПОДЧИНЕННЫй API получает правильный маркер, он сможет правильно реагировать. Второй компонент схемы: в левом нижнем левом слева значок куба, облачная фигура и значок мира представляют исходный API. В правом нижнем углу значок с фигурой куба, облачная фигура и значок мира представляют ПОДЧИНЕННЫй API. Стрелка соединяет фигуры слева с фигурами справа. Над этой стрелкой слева от фигур API нижнего потока является шестнадцатеричная фигура с меткой "A", представляющей маркер доступа.

Если API действует от имени пользователя и должен вызывать другой API, API должен использовать OBO для получения маркера доступа делегированного разрешения для вызова API-интерфейса внизу от имени пользователя. API никогда не должны использовать разрешения приложения для вызова API-интерфейсов Downstream, когда API действует от имени пользователя.

Следующие шаги