/rsoi-2022-lab5-authorization-zdhamasha

rsoi-2022-lab5-authorization-zdhamasha created by GitHub Classroom

Primary LanguageJava

Лабораторная работа #5

GitHub Classroom Workflow

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.

Требования

  1. Для автоматических прогонов тестов в файле autograding.json и classroom.yml заменить <variant> на ваш вариант.
  2. Код хранить на Github, для сборки использовать Github Actions.
  3. Каждый сервис должен быть завернут в docker.
  4. В classroom.yml дописать шаги на сборку, прогон unit-тестов.

Пояснения

  1. В роли Identity Provider можно использовать любое решение, вот несколько рабочих вариантов:
    1. Okta
    2. Auth0
  2. Для получения metadata для OpenID Connect можно использовать Well-Known URI: https://[base-server-url]/.well-known/openid-configuration.
  3. Из Well-Known metadata можно получить Issuer URI и JWKs URI.
  4. Для реализации OAuth2 можно использовать сторонние библиотеки.

Прием задания

  1. При получении задания у вас создается fork этого репозитория для вашего пользователя.
  2. После того как все тесты успешно завершатся, в Github Classroom на Dashboard будет отмечено успешное выполнение тестов.

Варианты заданий

Распределение вариантов заданий аналогично ЛР #2.