Токен AAD: почему aud иногда показывает идентификатор приложения, иногда это URL-адрес приложения?

Я использую adal.js для своего сайта для аутентификации AAD. После декодирования токена AAD aud выглядит иначе, это приложение API в AAD. Однако, когда я пытаюсь понять, как AAD работает в различных сценариях, почти во всех примерах документации токена AAD в качестве URL ресурса указывается aud, например http://contoso.com/.

Насколько я понимаю, aud означает, что этот токен выдан для. Там нет никаких ограничений на то, что это должно быть на самом деле.

Но мне любопытно, какова главная причина этого непоследовательного поведения aud из AAD.

Почему иногда это может быть идентификатор приложения, а иногда и URL? Почему бы не указывать идентификатор приложения или URL?

Может ли кто-нибудь помочь поделиться некоторыми мыслями?

Благодарю.

2 ответа

Решение

ADAL.JS работает с двумя типами токенов: id_token и access_token. id_token представляет личность пользователя, который вошел в ваше приложение. Очень приблизительно это содержит только 2 части - идентификатор пользователя, который предоставил учетные данные и идентификатор приложения, которое получило токен. В случае id_token значение aud равно Guid и соответствует AppId приложения, получившего токен. С точки зрения OAUTH v2 это то же самое приложение, которое содержит ресурсы, к которым пользователь хочет получить доступ.

Говоря о access_token - он представляет не только те 2, которые упомянуты выше, пользователя и приложение-эквайер, но также приложение с набором ресурсов, к которым пользователь предназначен для доступа. Это второе приложение, представленное заявкой aud, в большинстве случаев будет Uri, которое представляет имя участника службы (или идентификатор приложения Uri или IdentifierUri) - все они являются синонимами. Это значение позволяет указать путь от клиентского приложения AAD к серверному приложению AAD, которое содержит защищенные ресурсы.

Итак, ADAL.JS сначала запрашивает учетные данные пользователя и получает id_token, а затем отправляет дополнительный запрос конечной точке AAD для получения access_token. Если вы посмотрите на оба этих токена, вы увидите различную ценность в утверждении Aud, как описано выше.

Также возможно иметь Guid в утверждении aud для access_tokens - этот Guid будет соответствовать AppId приложения ресурса, поэтому, если у вас есть код, который анализирует значение, он должен быть готов обрабатывать не только Uris, но и Guids.,

Значение "AUD" в токене должно совпадать со значением "Resource" в запросе токена. Если вы запросите токен, в котором вы указываете ресурс в качестве идентификатора приложения, вы получите значение AUD с GUID. В противном случае, если вы используете URI идентификатора приложения, вы получите URL обратно.

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

Позвольте мне знать, если это помогает!

Другие вопросы по тегам