Skip to content

Conversation

@dyakovri
Copy link
Member

@dyakovri dyakovri commented Mar 12, 2025

JWT и стандарты OIDC позволят заменить UnionAuth из profcomff-auth на более универсальную альтернативу. Это повысит переиспользуемость сервисов. По идее, этот PR позволит использовать универсальный метод аутентификации как для Auth API и Authentik, которые используются в профкоме, так и для других OIDC провайдеров (Firebase, Keycloak, Auth0 и тп)

Изменения

  • Поддержка выдачи JWT токена вместо случайной строки
  • Конфигурация OIDC в пути /openid/.well_known/openid_configuration
  • Список публичных ключей для проверки JWT токена

Детали реализации

  • Утилиты шифровки и расшифровки JWT
  • Параметры конфигурации JWT токенов.
    • Можно включить генерацию JWT токенов, тогда токен будет генерироваться не просто случайной строкой, а JWT строкой
    • Можно передать приватный RSA ключ для подписи JWT ключей
  • Ручка /openid/.well_known/openid_configuration максимально приближена к спецификации OpenID Conneсt
  • Ручка /openid/.well_known/jwks полностью соответствует спецификации JWKS
  • Ручка /openid/token на предоставляет возможность обновлять токены
    • При включенной генерации JWT токенов необходимо периодически обновлять токен этой ручкой. Старые токены не будут автоматически продлеваться

Check-List

  • Вы проверили свой код перед отправкой запроса?
  • Вы написали тесты к реализованным функциям?
  • Вы не забыли применить форматирование black и isort для Back-End или Prettier для Front-End?

@dyakovri dyakovri assigned Temmmmmo and unassigned Temmmmmo Mar 12, 2025
@github-actions
Copy link

github-actions bot commented Mar 12, 2025

Code Coverage

Coverage Report
FileStmtsMissCoverMissing
auth_backend
   __main__.py330%1–5
   base.py12467%6–9
   exceptions.py45687%32, 50–52, 57, 78
auth_backend/auth_method
   base.py63494%52, 54, 61, 143
   method_mixins.py32294%27, 50
   oauth.py561770%38, 44, 49–54, 58–69, 95–100
   outer.py1142975%27, 34, 41, 48, 99, 105, 114, 168–173, 186–194, 206–212
   userdata_mixin.py19574%32, 37–40
auth_backend/auth_plugins
   airflow.py331652%26–37, 42–65
   authentic.py19010346%53–65, 70–83, 87–102, 106–112, 116–122, 129–131, 141–197, 204–254, 259, 264–265, 275–282, 311–317, 326, 331–341, 346–359
   coder.py321650%25–34, 39–52
   email.py2551495%91, 248, 333, 335, 340, 351–357, 404, 445, 496, 506
   github.py1046339%57–116, 130–174, 184, 189, 195–207
   google.py1126443%65–124, 138–166, 176, 182–186, 190–195, 199–208
   keycloak.py1046240%53–115, 125–175, 185, 190, 196–201
   lkmsu.py16411232%60–113, 131–169, 179–201, 206, 211, 217–227, 231–245, 249–278, 282–291
   mailu.py341847%25–34, 39–54
   postgres.py432053%29–35, 40–46, 51–63
   telegram.py1116145%56–90, 105–123, 133, 139, 149–169, 173–187
   vk.py1288236%71–123, 137–175, 185, 190, 196–213, 220–246
   yandex.py1278335%58–128, 141–179, 190, 196, 202–228
auth_backend/cli
   group.py13130%1–17
   process.py56560%1–72
   scope.py11110%1–20
   user.py20200%1–40
   user_group.py12120%1–25
auth_backend/kafka
   kafka.py502060%30–33, 42–44, 56–59, 72–82, 85, 93, 103
   kafkameta.py9278%8, 12
auth_backend/models
   base.py83594%79, 100–102, 106
   db.py146597%53, 57, 215, 219, 232
   dynamic_settings.py27774%24–31
auth_backend/routes
   base.py28293%21–22
   exc_handlers.py43686%31, 56, 69, 95, 117, 125
   groups.py84396%85, 135, 137
   oidc.py34197%94
   scopes.py36392%24, 53–54
   user.py942771%54, 56, 58–67, 73–79, 91–111, 162, 179
   user_session.py84693%80–89, 119, 121, 182, 189
auth_backend/schemas
   models.py100397%150–152
auth_backend/schemas/types
   scopes.py24675%30–32, 37, 40, 42
auth_backend/utils
   jwt.py57788%35–42
   oidc_token.py37878%26, 39–43, 48, 74
   security.py46296%41, 66
   smtp.py771877%76–79, 101–120
   string.py7186%12
   user_session_control.py41295%33, 41
TOTAL3125103067% 

Summary

Tests Skipped Failures Errors Time
72 6 💤 0 ❌ 0 🔥 12.672s ⏱️

@dyakovri dyakovri requested a review from Temmmmmo March 12, 2025 04:52
@dyakovri
Copy link
Member Author

dyakovri commented Mar 12, 2025

@DaymasS помоги с тестом плз, не понимаю что хочет(

UPD: Блин, ну вообще я сломал. На мэйне все ок

@dyakovri dyakovri requested a review from DaymasS March 12, 2025 05:08
@dyakovri dyakovri changed the title OIDC basics JWT tokens Mar 12, 2025
@dyakovri dyakovri requested a review from Temmmmmo March 12, 2025 12:11
@github-actions
Copy link

💩 Code linting failed, use black and isort to fix it.

@github-actions
Copy link

💩 Code linting failed, use black and isort to fix it.

@dyakovri dyakovri merged commit fbfa020 into main Mar 13, 2025
2 checks passed
@dyakovri dyakovri deleted the jwt branch March 13, 2025 18:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants