Azure Проверка токена Active Directory - PullRequest
0 голосов
/ 30 марта 2020

Я интегрирую Azure Active Directory в облачную платформу. Поскольку наше приложение является мультитенантным и опирается на требования платформы c, мы определили самый простой способ go об этом - получить токен Azure AD через наш SPA, передать его обратно в наш WebApi, проверьте его и верните в SPA маркер платформы со всеми необходимыми нам требованиями go о нашей обычной деятельности (как если бы это был простой запрос на аутентификацию имени пользователя / пароля).

Я обеспокоен хотя уровень безопасности для этого.

Некоторый контекст
Поскольку наша платформа является мультитенантной, мы просим каждого клиента зарегистрировать приложение на своем портале Azure AD, а затем предоставить нам с сгенерированным приложением (идентификатор клиента) и идентификатором каталога (клиента) . Мы используем эти две части информации для первоначального запроса к Azure через наш интерфейсный SPA (следуя примеру node.js, предоставленному руководством Microsoft Quickstart при регистрации приложения). Теперь, поскольку пользователь не прошел проверку подлинности на данном этапе, нам нужно было каким-то образом вернуть эти два указанных c идентификатора для клиента. Мы выполнили это, используя поддомен для идентификации.

Например, acmeinc.mydomain.com вернет другой идентификатор приложения (идентификатор клиента) и каталог (арендатор), чем billy.mydomain.com. Очевидно, что теперь они публикуются c, так как этот запрос происходит от неаутентифицированного внешнего интерфейса.

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

Я что-то здесь упускаю? Я чувствовал бы себя намного легче, если бы можно было запросить у клиента также утверждение, которое моя платформа генерирует в частном порядке, чтобы я мог проверить это утверждение наряду с обычной проверкой JWT. Пользовательские утверждения не представляется возможным на портале Azure AD.

Я пропустил важный шаг или просто переосмыслил это?

1 Ответ

1 голос
/ 30 марта 2020

Кто-то не может подделать эмитента в токене, потому что токен имеет цифровую подпись. Без закрытых ключей Azure AD невозможно создать действительную подпись. Без этого любые изменения токена будут немедленно замечены, потому что подпись не совпадает.

Ваш сервер должен уже проверять эту подпись, если вы используете стандартную проверку JWT.

Требование клиенты, зарегистрировавшие приложение в своем арендаторе, - это небольшая работа, которую я предпочел бы не ставить на них. Рассматривали ли вы сделать свое приложение мультитенантным в Azure AD? Таким образом, ваши клиенты смогут войти в ваше приложение, согласиться на необходимые разрешения и начать его использовать. Без необходимости вручную что-либо регистрировать. Это может быть сделано в потоке регистрации, когда пользователь входит в систему, а затем он может решить, какой поддомен он хочет. В этот момент вы будете знать их идентификатор арендатора, который вы можете хранить. Поэтому в будущем вы всегда можете использовать правильный идентификатор клиента / каталога при входе в систему.

Недостатком этого подхода является управление URL-адресами ответов. С помощью специально зарегистрированных приложений они могут зарегистрировать свою собственную версию субдомена в качестве URL-адреса ответа. С этим универсальным мультитенантным приложением c вам необходимо управлять им. И вы не можете добавить их бесконечное количество, и шаблоны больше не поддерживаются. Таким образом, ваша аутентификация должна происходить с обычным c URL-адресом ответа на аутентификацию, например auth.mydomain.com, с которого они будут перенаправлены на URL-адрес клиента.

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