Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Авторизация по OAuth #243

Merged
merged 14 commits into from
Jul 23, 2024

Conversation

MSITETOP
Copy link
Contributor

@MSITETOP MSITETOP commented Jul 17, 2024

Добавить авторизацию по токену.

При инициализации объекта Bitrix пользователь добавляет параметр token_func, содержащий ссылку на асинхронную функцию, которая вызывается библиотекой при необходимости получения или обновления токена.

Эта функция должна возвращать токен авторизации.

Если сервер возвращает ошибку о том, что токен устарел, все прочие запросы, идущие в параллели, приостанавливаются, пока не будет обновлен токен.

Copy link

sourcery-ai bot commented Jul 17, 2024

Reviewer's Guide by Sourcery

This pull request introduces an auth parameter to the BitrixAsync, ServerRequestHandler, and package_batch methods to handle authentication tokens. The auth parameter is included in requests if it exists, allowing for more flexible authentication handling.

File-Level Changes

Files Changes
fast_bitrix24/mult_request.py
fast_bitrix24/srh.py
fast_bitrix24/bitrix.py
Introduced an auth parameter to handle authentication tokens, ensuring it is included in requests if provided.

Tips
  • Trigger a new Sourcery review by commenting @sourcery-ai review on the pull request.
  • Continue your discussion with Sourcery by replying directly to review comments.
  • You can change your review settings at any time by accessing your dashboard:
    • Enable or disable the Sourcery-generated pull request summary or reviewer's guide;
    • Change the review language;
  • You can always contact us if you have any questions or feedback.

Copy link

@sourcery-ai sourcery-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey @MSITETOP - I've reviewed your changes and found some issues that need to be addressed.

Blocking issues:

  • Potential mutation of params dictionary. (link)
Here's what I looked at during the review
  • 🔴 General issues: 1 blocking issue, 3 other issues
  • 🟢 Security: all looks good
  • 🟢 Testing: all looks good
  • 🟢 Complexity: all looks good
  • 🟢 Documentation: all looks good

Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment to tell me if it was helpful.

fast_bitrix24/mult_request.py Outdated Show resolved Hide resolved
fast_bitrix24/mult_request.py Outdated Show resolved Hide resolved
fast_bitrix24/srh.py Outdated Show resolved Hide resolved
fast_bitrix24/srh.py Outdated Show resolved Hide resolved
@leshchenko1979
Copy link
Owner

@MSITETOP,

  1. А вы видели Авторизация по OAuth #149 ?
  2. Если я правильно понимаю, в вашем решении никак не решен вопрос обновления auth_token. Вы можете попробовать воспользоваться кодом из Авторизация по OAuth #149, возможно, он решает вашу проблему более полно?

leshchenko1979 and others added 2 commits July 17, 2024 15:32
Co-authored-by: sourcery-ai[bot] <58596630+sourcery-ai[bot]@users.noreply.github.com>
Co-authored-by: sourcery-ai[bot] <58596630+sourcery-ai[bot]@users.noreply.github.com>
@MSITETOP
Copy link
Contributor Author

@MSITETOP,

  1. А вы видели Авторизация по OAuth #149 ?
  2. Если я правильно понимаю, в вашем решении никак не решен вопрос обновления auth_token. Вы можете попробовать воспользоваться кодом из Авторизация по OAuth #149, возможно, он решает вашу проблему более полно?

1,2 видел. насколько я понял это решение было примерно 5 лет назад. с тех пор уже много всего изменилось. более того я не вижу смысла в вашу библиотеку пихать механизм рефреша токена, так как он за собой влечет и хранение этих токенов, а это какая-то БД и тут опять не хотелось бы привязываться к конкретной БД и ее структуре.
А вот дать возможность вместо хука указать токен авторизации на мой взгляд оптимальное решение

@leshchenko1979
Copy link
Owner

с тех пор уже много всего изменилось.

Кажется, с точки зрения OAuth-авторизации не изменилось ничего.

так как он за собой влечет и хранение этих токенов, а это какая-то БД и тут опять не хотелось бы привязываться к конкретной БД и ее структуре.

не вижу логики -- зачем хранить токены в БД?

@MSITETOP
Copy link
Contributor Author

MSITETOP commented Jul 17, 2024

с тех пор уже много всего изменилось.

Кажется, с точки зрения OAuth-авторизации не изменилось ничего.

так как он за собой влечет и хранение этих токенов, а это какая-то БД и тут опять не хотелось бы привязываться к конкретной БД и ее структуре.

в целом я не против варианта реализации предложенного в Авторизация по OAuth #149
единственное мне наверное не нравится, что токен передается в виде GET параметра
url = self.webhook + method + await self.get_token_param()

не вижу логики -- зачем хранить токены в БД?

а где их еще хранить? наши приложения ставят на разные порталы у каждого портала свой домен и остальные креды. нам нужно по каждому порталу хранить домен, рефреш токен, access_token (чтобы не рефрешить его каждый раз), а так же данные специфичные для нашего приложения

@MSITETOP
Copy link
Contributor Author

не вижу логики -- зачем хранить токены в БД?

кажется я понял о чем ты "зачем делать реализацию хранения токена в fast_bitrix24, если для получения токена используется своя произвольная функция получения токена?" согласен, в этой реализации хранение токенов внутри fast_bitrix24 не требуется

@leshchenko1979
Copy link
Owner

единственное мне наверное не нравится, что токен передается в виде GET параметра

Это можно поправить.

Ключевое, что мне хотелось бы видеть в релизе -- это какой-то механизм обновления токена. У меня в #149 это сделано через вызов пользовательской функции, которая будет возвращать свежий токен. То есть, удобным способом отдано на откуп пользователю.

Возможно, есть еще какие-то механизмы?

У меня предложение -- можете попробовать у себя покрутить #149 ?

Если хотите, добавить туда упаковку auth в тело POST-запроса.

Либо в свой PR добавьте обновление токена.

@leshchenko1979
Copy link
Owner

leshchenko1979 commented Jul 18, 2024

@MSITETOP

Так, я вижу, что #149 содержит конфликты мерджа. Боюсь делать мердж -- можно нарубить дров. Давайте возьмем ваш код за основу и в нем попробуем наладить освежение токена?

@MSITETOP
Copy link
Contributor Author

Так, я вижу, что #149 содержит конфликты мерджа. Боюсь делать мердж -- можно нарубить дров. Давайте возьмем ваш код за основу и в нем попробуем наладить освежение токена?

ок. тоесть мне в этом pr сделать реализацию с передачей функции, а не токена напрямую?

@leshchenko1979 leshchenko1979 changed the title Msitetop/issue242 Авторизация по OAuth Jul 18, 2024
Copy link
Owner

@leshchenko1979 leshchenko1979 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ок. тоесть мне в этом pr сделать реализацию с передачей функции, а не токена напрямую?

Я добавил обновление токена. Осталось:

  • протестировать работоспособность
  • написать автотесты
  • обновить документацию

@MSITETOP
Copy link
Contributor Author

ок. тоесть мне в этом pr сделать реализацию с передачей функции, а не токена напрямую?

Я добавил обновление токена. Осталось:

  • протестировать работоспособность
  • написать автотесты
  • обновить документацию

я чем сейчас могу помочь? протестировать работоспособность?

@leshchenko1979
Copy link
Owner

я чем сейчас могу помочь? протестировать работоспособность?

Да.

У меня нет под рукой аккаунта, где требуется авторизация, и провести интеграционное тестирование я сам не смогу.

Ну и в отношении автотестов и документации помощь тоже приветствуется. :)

@MSITETOP
Copy link
Contributor Author

я чем сейчас могу помочь? протестировать работоспособность?

Да.

У меня нет под рукой аккаунта, где требуется авторизация, и провести интеграционное тестирование я сам не смогу.

Ну и в отношении автотестов и документации помощь тоже приветствуется. :)

ок. в течении дня протестирую и отпишусь

@leshchenko1979
Copy link
Owner

Мне также нужно будет получить от вас образец ответа сервера, который отправляется при необходимости обновления токена.

Его можно получить, например, включив логирование.

Сможете прислать?

@MSITETOP
Copy link
Contributor Author

Мне также нужно будет получить от вас образец ответа сервера, который отправляется при необходимости обновления токена.

Его можно получить, например, включив логирование.

Сможете прислать?

да. все отправлю после тестов.

в том числе (видимо в личку в телеге) стенд где можно проверить и креды приложения тестового.

@MSITETOP
Copy link
Contributor Author

MSITETOP commented Jul 18, 2024

код ответа при протухании токена 401, но с механизмом рефреша, что то не так. нужна будет твоя помощь, чтобы это исправить наверное

@leshchenko1979 leshchenko1979 merged commit 0155a7c into leshchenko1979:master Jul 23, 2024
11 checks passed
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.

2 participants