Проверка токена доступа AZURE на сервере ресурсов - PullRequest
0 голосов
/ 18 февраля 2019

У меня есть сценарий, в котором мне нужен токен доступа из Azure AD для всех API-интерфейсов моего сервера ресурсов, поскольку он требует обращения к API Graph.Насколько я знаю, мы не можем вызывать Graph API с помощью Id Token, и вместо этого требуется Access Token.Поэтому после успешной аутентификации из Azure SSO пользовательский интерфейс отправляет маркер доступа в качестве заголовка носителя во всех моих REST API Spring Boot 2.

Мой вопрос заключается в том, как проверить токен доступа по моим REST API.есть ли у нас какая-либо готовая функция для этого или нам нужно реализовать пользовательскую проверку по токенам доступа.

Допустим, если у меня есть REST API, который вызывает все группы пользователей, как показано ниже

@PreAuthorize("hasRole('ROLE_ADMIN')")
public GroupDetailsResponse getAllUserGroups() {
 .....
}

Как реализовать @PreAuthorize с помощью токена доступа.

1 Ответ

0 голосов
/ 06 марта 2019

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

• Проверьте, правильно ли сформирован JWT

• Проверьте подпись

• Подтвердите стандартные утверждения

• Проверка разрешений приложения (областей)

Для реализации пользовательской проверки необходимо выполнить следующее:

1) Разобрать Jwt

Для анализаJWT вы можете либо вручную выполнить все проверки, как описано в спецификации RFC 7519> 7.2 Проверка JWT, либо использовать одну из библиотек, перечисленных в разделе Библиотеки для подписи / проверки токенов в JWT.io.

Например, если ваш API реализован с Node.js и вы хотите использовать библиотеку node-jsonwebtoken, то вы бы вызвали метод jwt.verify ().Если синтаксический анализ завершится неудачно, библиотека возвратит ошибку JsonWebTokenError с сообщением о неправильном формате jwt.

2) Проверьте алгоритм подписи

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

Чтобы проверить, соответствует ли подпись ожиданиям API, необходимо декодировать JWT и извлечь свойство alg заголовка JWT.

Кроме того, вы можете использовать одну из библиотек, перечисленных в разделе «Библиотеки для подписи / проверки токенов» JWT.io .

3) Проверить заявки

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

• Истечение срока действия токена: текущая дата / время должны быть раньше даты / времени истечения срока, указанных в заявке на получение опыта (которая является меткой времени Unix).Если нет, запрос должен быть отклонен.

• Эмитент токена: в запросе iss указывается эмитент JWT.Значение должно соответствовать значению, настроенному в вашем API.Для JWT, выпущенных Auth0, iss содержит ваш домен Auth0 с префиксом https: // и / суффиксом: https://YOUR_DOMAIN/. Если вы используете функцию пользовательских доменов, вместо этого значение будет иметь следующий формат: https:///.

• Аудитория токенов: утверждение aud определяет получателей, для которых предназначен JWT.Для JWT, выпущенных Auth0, Audholds содержит уникальный идентификатор целевого API (поле «Идентификатор» в настройках вашего API).Если API не является целевой аудиторией JWT, он должен отклонить запрос.

Вот библиотека JWT для JAVA, где вы можете использовать метод проверки (токен) для проверки.

https://github.com/auth0/java-jwt

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