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

Проблема с методом bx24.obtain_tokens #15

Open
KosenkoEvgenii opened this issue Oct 22, 2020 · 6 comments
Open

Проблема с методом bx24.obtain_tokens #15

KosenkoEvgenii opened this issue Oct 22, 2020 · 6 comments

Comments

@KosenkoEvgenii
Copy link

KosenkoEvgenii commented Oct 22, 2020

Пример кода на котором получаю ошибку конвертации в json и пример кода как временно обхожу эту проблему
from pybitrix24 import Bitrix24
#from bitrix24 import *
from SetupData import *
import requests

from classProjectListSetting import ProjectSetup

client_id='код client_id'
client_secret='код client_secret'

bx24 = Bitrix24('inside.сайт с битрикс.ru', client_id=client_id, client_secret=client_secret, user_id= BITRIX24USERID)
url = bx24.build_authorization_url()

#далее эмулирую авторизацию пользователя на странице
user_agent_val = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36'

Создаем сессию и указываем ему наш user-agent

session = requests.Session()

r = session.get(url, headers = {
'User-Agent': user_agent_val
})

#Хотя , мы ранее указывали наш user-agent и запрос удачно прошел и вернул нам нужный ответ, но user-agent изменился на тот , который был по умолчанию. И поэтому мы обновляем его.
session.headers.update({'User-Agent':user_agent_val})

Получаем значение _xsrf из cookies

_xsrf = session.cookies.get('_xsrf', domain=".notamedia.ru")

Осуществляем вход с помощью метода POST с указанием необходимых данных

post_request = session.post(url, {

'backUrl': url,

 'AUTH_FORM':'Y',
 'TYPE':'AUTH',
 'backurl':'/ru/auth/index.php',
 'USER_LOGIN': 'логин пользователя под которым подключаемся',
 'USER_PASSWORD': 'пароль этого пользователя' ,
 'Login':'Войти'

'_xsrf':_xsrf,

'remember':'yes',

})
res = post_request.json()
code = res['code']

сейчас в лоб прописал, что бы код работал!

bx24._access_token = res['access_token']

bx24._refresh_token = res['refresh_token']

data = bx24.obtain_tokens(code=code) # на этой строке падаем с ошибкой преобразования в json, просмотри страницы на которую получаем показывает, что мы попадаем опять на страницу авторизации пользователя
#print(data)

на этом куске получаем ошибку (requester)

def decode_response(s):
if sys.version_info.major == 2:
return json.load(s)
else:
return json.loads(s.read().decode('utf-8'))

@yarbshk
Copy link
Owner

yarbshk commented Nov 2, 2020

Евгений приветствую! я правильно понял вы хотите автоматически авторизоваться используя креды клиента (ид + секрет)?

@KosenkoEvgenii
Copy link
Author

KosenkoEvgenii commented Nov 3, 2020 via email

@yarbshk
Copy link
Owner

yarbshk commented Nov 3, 2020

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

Bitrix24 использует OAuth 2.0 framework для авторизации 3rd party applications а конкретно он использует authorization code grant для авторизации пользователей. этот способ придуман не для скриптов а для публикации 3rd party приложений в маркетплейсе битрикса. например если вы используете какое-то приложение с маркетплейса вы прежде чем начать работу должны предоставить права (например дать доступ к вашей CRM или сотрудникам) т.е. без вашего участия приложение не продолжит работу. это причина почему вас редиректит на ауз сервер когда вы пробуете сделать автоматизированный запрос.

в случае скриптов нужно использовать веб хуки которые используют апи ключ для предоставления доступа.

@KosenkoEvgenii
Copy link
Author

Хуки пробовал - но через них не смогли получить доступ к инфоблокам. По факту я сейчас получаю все нужные параметры от страницы авторизации и напрямую их подставляю в библиотеку bx24._access_token = res['access_token']
bx24._refresh_token = res['refresh_token']

@yarbshk
Copy link
Owner

yarbshk commented Nov 3, 2020

странно. это повод создать тикет на битрикс24 форуме.. либо они специально ограничили доступ к этим АПИ. я могу закрывать эту ишью или у вас есть еще какие-то вопросы?

@andrei1996-hub
Copy link

Добрый день!
В дополнение к теме, хотелось бы задать вопрос: методом build_authorization_url() я генерирую ссылку для получения кода авторизации, и не совсем понятно, что с этой ссылкой дальше делать...

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

No branches or pull requests

3 participants