Лабораторная работа #5
OAuth2 Authorization
Формулировка
На базе Лабораторной работы #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 можно использовать любое решение, вот несколько рабочих вариантов:
- Okta
- Auth0
- Для получения 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.