На базе Лабораторной работы #4 реализовать OAuth2 token-based авторизацию.
- Для авторизации использовать OpenID Connect, в роли Identity Provider использовать стороннее решение.
- На Identity Provider настроить
использование Resource Owner Password flow
(в одном запросе передается
clientId
,clientSecret
,username
,password
). - Все методы
/api/**
(кроме/api/v1/authorize
и/api/v1/callback
) на всех сервисах закрыть token-based авторизацией. - В качестве токена использовать JWT, для валидации токена использовать JWKs, запрос к Identity Provider делать не нужно.
- JWT токен пробрасывать между сервисами, при получении запроса валидацию токена так же реализовать через JWKs.
- Убрать заголовок
X-User-Name
и получать пользователя из JWT-токена. - Если авторизация некорректная (отсутствие токена, ошибка валидации JWT токена, закончилось время жизни токена
(поле
exp
в payload)), то отдавать 401 ошибку. - В
scope
достаточно указыватьopenid profile email
.
- Для автоматических прогонов тестов в файле autograding.json
и classroom.yml заменить
<variant>
на ваш вариант. - Код хранить на Github, для сборки использовать Github Actions.
- Каждый сервис должен быть завернут в docker.
- В classroom.yml дописать шаги на сборку, прогон unit-тестов.
- В роли Identity Provider можно использовать любое решение, вот несколько рабочих вариантов:
- Для получения metadata для OpenID Connect можно
использовать Well-Known URI:
https://[base-server-url]/.well-known/openid-configuration
. - Из Well-Known metadata можно получить Issuer URI и JWKs URI.
- Для реализации OAuth2 можно использовать сторонние библиотеки.
- При получении задания у вас создается fork этого репозитория для вашего пользователя.
- После того как все тесты успешно завершатся, в Github Classroom на Dashboard будет отмечено успешное выполнение тестов.
Распределение вариантов заданий аналогично ЛР #2.