Я не уверен, где (или если) мне следует подтвердить одноразовый номер.
Конечно, вы должны подтвердить одноразовый номер. Потому что nonce
является обязательным , и оно будет возвращено и содержится в качестве претензии в id_token
. Когда вы проверяете id_token
, вы просто подтверждаете претензию nonce. Использование одноразового номера означает ослабление атак воспроизведения токена (тот, кто хочет использовать атаку воспроизведения токена, не будет знать одноразовый номер, поэтому у каждого токена есть разные одноразовые номера для определения источника запроса).
Существует четкое объяснение одноразового номера для конечной точки AAD v2:
nonce
(обязательно)
Значение, включенное в запрос, , сгенерированное приложением, которое будет
включены в получившийся id_token
в качестве иска. Приложение может проверить
это значение для смягчения атак воспроизведения токенов. Обычно это значение
рандомизированная, уникальная строка, которая может быть использована для определения происхождения
запрос.
Итак, вы можете просто проверить id_token для проверки одноразового номера.
а чем отличается проверка состояния?
Да, эффект nonce отличается от состояния. Во-первых, nonce будет возвращен в id_token
, и вы можете проверить его при декодировании и проверке id_token
. Но state
возвращается в ответе, а не в токене. Кроме того, state
имеет значение и эффект, отличные от nonce.
state
(рекомендуется)
Значение, включенное в запрос, которое также будет возвращено в
ответ токена. Это может быть строка любого контента, который вы пожелаете. A
случайно сгенерированное уникальное значение обычно используется для предотвращения
атаки подделки межсайтовых запросов . Государство также используется для кодирования
информация о состоянии пользователя в приложении до
произошел запрос аутентификации, например, страница или представление
на.
Дополнительно, атака воспроизведения отличается от атак подделки межсайтовых запросов. Вы можете обратиться за более подробной информацией об этих двух атаках. Затем вы поймете, почему nonce
находится в токене, а state
в ответе.
Проверка правильности одноразового номера (токена) на клиенте
Как правило, вы можете проверить id_token
в клиентском коде, но общепринятой практикой является отправка nonce
на внутренний сервер и выполнение проверки там.
В соответствии с архитектурой это означает, что проверяет токен как на клиенте, так и на сервере ресурсов. Для SPA мы можем использовать ADAL.js для проверки nonce
, id_token
, в котором содержится nonce
заявление о смягчении атак воспроизведения токенов.
Надеюсь, это поможет!