Как защитить API с помощью Azure Active Directory, регистрации приложений и корпоративных приложений

У меня есть серверный API на веб-сайте Azure, который мне нравится защищать с помощью Azure AD.

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

Затем я могу отправить этот токен в API и проверить токен в серверном API, чтобы проверить его.

Но разве этот токен не дает доступ ко всем ресурсам подписки? Как мне ограничить регистрацию приложения только доступом к этому конкретному API? А еще нет другого API в подписке?

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

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

Или есть другой способ сделать это?


person Riri    schedule 15.04.2020    source источник


Ответы (1)


Но разве этот токен не дает доступ ко всем ресурсам подписки? Как ограничить регистрацию приложения только для доступа к этому конкретному API? А еще нет другого API в подписке?

Токен дает доступ только к API, идентифицированному заявлением аудитории (aud) в токене. Больше ничего. Поэтому, если ваше клиентское приложение запрашивает токен доступа к вашему API, этот токен действителен только для этого API.

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

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

да. Вы можете найти корпоративное приложение (субъект-службу) для API, включить Требовать назначения пользователя, а затем назначить пользователей / группы, которым вы хотите иметь доступ к API, на вкладке «Пользователи / группы» корпоративного приложения. .

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

Если вы используете одну и ту же регистрацию приложения как для клиента, так и для API, вы должны помнить, что вы должны получить токен доступа независимо от вызова API. Не используйте токен id. Также в этом случае пользователь, не назначенный приложению, не сможет войти в систему.

person juunas    schedule 15.04.2020
comment
Итак - необязательно использовать корпоративное приложение для представления API? Я справлюсь только с регистрацией приложения? Но я думаю, что тогда нет возможности ограничивать пользователей? Верно? Также токен дает доступ только к API, идентифицированному заявлением аудитории (aud) в токене. - как мне идентифицировать пользовательский API на портале регистрации приложений? - person Riri; 15.04.2020
comment
Когда вы создаете регистрацию приложения, для него также создается корпоративное приложение. Корпоративное приложение является субъектом службы, удостоверением приложения в этом клиенте AAD. - person juunas; 15.04.2020
comment
OK. Возьми. Я думал, что мне также нужно вручную создать корпоративное приложение. Но что мне проверять в API серверной части? Ауд? Соответствует ли аудит идентификатору из корпоративного приложения? - person Riri; 15.04.2020
comment
Во-первых, вам не следует выполнять валидацию вручную. Большинство фреймворков приложений поддерживают проверку JWT. Некоторые вещи, которые необходимо проверить: аудитория, эмитент, срок действия, время активации, цифровая подпись. Аудитория - это либо идентификатор клиента для регистрации приложения, либо URI идентификатора приложения для регистрации приложения. Оба этих свойства существуют и в корпоративном приложении / субъекте службы, поскольку это частично копия регистрации приложения. - person juunas; 15.04.2020
comment
Спасибо! Заключительный вопрос ???? Если у меня есть несколько серверных API, к которым я хотел бы предоставить доступ. Есть ли идея, что я могу связать регистрацию приложения с несколькими корпоративными приложениями (которые затем представляют разные API)? Или как бы вы это сделали? - person Riri; 15.04.2020
comment
Ах нет. С корпоративным приложением всегда связана только одна регистрация приложения. Скорее всего, два варианта: 1) назначить пользователя каждому приложению, 2) назначить группу каждому приложению и назначить пользователя в группу один раз. Однако для управления доступом на основе группы пользователям требуются лицензии Premium: \ - person juunas; 15.04.2020
comment
comment
Нашел это - разве это не сработает для настройки нескольких API? docs.microsoft. ru / en-us / azure / api-management / - person Riri; 15.04.2020
comment
Да, API Management - тоже вариант :) - person juunas; 15.04.2020
comment
да. Но помимо APIM, было бы невозможно иметь несколько регистров приложений. представляющие различные серверные API. Предоставьте области в этих правилах приложений API. Тогда есть клиентское приложение рег. у кого есть разрешение на чтение? Думая что-то вроде этого imgur.com/a/pQ7IS3h Или я что-то здесь пропустил? - person Riri; 15.04.2020
comment
Да, клиентскому приложению может потребоваться доступ к нескольким API :) - person juunas; 15.04.2020