lesterrry / mosru

Mos.ru OAuth & api provider library for Ruby
https://mos.ru
Boost Software License 1.0
4 stars 1 forks source link

Getting status 200 on login_post #2

Closed MrMarvel closed 2 years ago

MrMarvel commented 2 years ago

I am every time getting 200 OK after posting login/password request. I cannot login. Did you have this problem while developing? I am working on emias via mosru project https://github.com/MrMarvel/EmiasChecker/blob/master/main.py

lesterrry commented 2 years ago

I am every time getting 200 OK after posting login/password request. I cannot login.

Did you have this problem while developing?

@MrMarvel сохраните данные ответа в html файл и посмотрите, что пишет. Скорее всего он просит капчу. В таком случае надо проверить заголовки и куки запроса, скорее всего, что-то не так. Посмотрите мой код и воспроизведите такой же запрос, как у меня.

MrMarvel commented 2 years ago

@Lesterrry И правда, капчу просит. image Я воспроизвожу как раз ваш запрос, только на питоне. Причём в итоге полученный прослушанный запрос через postman, впоследствии конвертированный в Ruby, получился один и тот же код, что и у вас, с моей точки зрения, что по логике должно дать одинаковый результат:

# CONVERTED FROM REQUEST IN POSTMAN TO LANGUAGE RUBY
require "uri"
require "net/http"

url = URI("https://login.mos.ru/sps/login/methods/password?bo=/sps/oauth/ae?scope=profile+openid+contacts+usr_grps&response_type=code&redirect_uri=https://www.mos.ru/api/acs/v1/login/satisfy&client_id=mos.ru")

https = Net::HTTP.new(url.host, url.port)
https.use_ssl = true

request = Net::HTTP::Post.new(url)
request["host"] = "login.mos.ru"
request["user-agent"] = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.5 Safari/605.1.15"
request["accept-encoding"] = "gzip, deflate"
request["accept"] = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
request["connection"] = "keep-alive"
request["origin"] = "https://login.mos.ru"
request["content-type"] = "application/x-www-form-urlencoded"
request["referer"] = "https://login.mos.ru/sps/login/methods/password?bo=/sps/oauth/ae?scope=profile+openid+contacts+usr_grps&response_type=code&redirect_uri=https://www.mos.ru/api/acs/v1/login/satisfy&client_id=mos.ru"
request["cookie"] = "fm=eyJtZXRob2RzIjpbInBhc3N3b3JkIiwieDUwOSIsImV4dGVybmFsSWRwczp2azp2a18xIiwiZXh0ZXJuYWxJZHBzOmVzaWE6ZXNpYV8xIiwiZXh0ZXJuYWxJZHBzOm1haWw6bWFpbF8xIiwiZXh0ZXJuYWxJZHBzOnNicmY6c2JyZl8xIiwiZXh0ZXJuYWxJZHBzOm9rOm9rXzEiLCJleHRlcm5hbElkcHM6eWFuZGV4OnlhbmRleF8xIl0sInBhcmFtcyI6eyJjYXB0Y2hhSWQiOiIxOGY4NTdkNy1hZDIxLTRjMjctYmJlMC1iZjZiNTY4OGUwMGQiLCJjaGFsbGVuZ2UiOiJyZy9jc3ZnQUlrSTl6Ni9nd1FXdyIsImZlZFBvaW50cyI6InlhbmRleDp5YW5kZXhfMSJ9LCJmYXZvcml0ZU1ldGhvZHMiOltdfQ; blc=Bm0TO48Dsgvot8szuzNt0jTA2ldco40_-p5gsbnwgm_2MdatmDnG-uyg9v1ny0sgN26XS5bTdsCvetEfFwibcjzTcMddwnpI7_b3rgaRR4sOt-bACFFpMrdTgJHUIPXf3B3l8-3oP2OIkwFLxCWBoOtBT-C1v8beX95y4HmMGVsmQJpfLsMWaX3P9SXCorywfnWxdkumrqnUf55vbrAe3VWbs7iSux3Yamv0NrzZM9Rkv0usB9N124d_4Ofp8o5la2pgWUNkwk4FomLO2toY9vRTPhU_oiwHGW5bwZQpFTmGp4_DI_xJMffAQXdriKrDjwdpG15OB2eH33h3QD_VwzANqXIhspnNs-XSG4TxeGWhRNssf7aoLwFx8l72H2Q504NtMtyx6D2_PJxT6qi7YCEo-E6jAWLfuCddAiEtY2sd-YAV47L9l1zoerJL4wZhWFR3-ahdnx6WvGLbSMiFsyGkWN36w-TYLACDNkid4j-BXXSacImv3VFOldHQEmP7TuiY09EP9JxM2STqIKXnPCJrUKnroqG2Lzvr6QqipjzLIRDel-kNhw5xWE-pEZgpurMn8ECtI0LWpvj_PXnmiy1LVp0lwBZWe_XOwBR5Abh_skKpVNN3gvLAs89-9ODqWz74VDzsZkVnn_aWuWzINbRByCuzBYIXI0AwR4BF0IhIfrXxW5H09IiV8v47mQtYrZ4rSHnkHjBrNqxrApS1WA|MTY1NTA3NjgzNQ|U0gxQVMxMjhDQkM|ob78zfoy0libeAndlhN3Ng|V3sC8EmyP5VumfCm6AjlVBayksQ; blg=ru; bua=14f5f13c-4bb1-4024-b08b-04f8a4cdf738; oauth_az=PijUhaXAL1Beq-RUyNbQVxufMAkFRkCdfRPo9hltSjPjoZbP4dVq_nYnABz2KqR2rNzvcY6Kreou0nK2umzihQCqGD7iCEStIrf3XquJaGM; origin=mos.ru|%2Fsps%2Foauth%2Fae%3Fscope%3Dprofile%2Bopenid%2Bcontacts%2Busr_grps%26response_type%3Dcode%26redirect_uri%3Dhttps%3A%2F%2Fwww.mos.ru%2Fapi%2Facs%2Fv1%2Flogin%2Fsatisfy%26client_id%3Dmos.ru; KFP_DID=72b01986-3f1e-4bfa-ccf3-07a1b721f1bc;
oxxfgh=8ffefd79-8fe5-4eba-9870-2301b8402916#2#2592000000#5000#600000#81540;
oyystart=8ffefd79-8fe5-4eba-9870-2301b8402916_1;
session-cookie=16f8039cff0b2ba2ebdb8cb2e59e4e0269b6f25fda3dcd6908ed5c6bf2fa43c9547e254ffa42cd8e160f4de46aa14adf"
request["content-length"] = "114"
request["x-postman-captr"] = "3650910"
request.body = "isDelayed=false&login=чччччччччч&password=чччччччччччччч&bfp=e4eb7b3d199624ca9b36750e9e0f3404"

response = https.request(request)
puts response.read_body

Также немного не понял как обойти капчу

lesterrry commented 2 years ago

@MrMarvel Если вы посмотрите на мою функцию Mosru::Auth::perform, увидите, что для входа делается не один запрос, а куча. Церемония входа состоит из множества последовательных редиректов, и куки надо носить из одного в другой. Куки в вашем запросе, скорее всего, одноразовые и уже истекли. Посмотрите, с какого запроса я начинаю, дальше только следовать за редиректами и сохранять куки, насколько мне известно, requests в питоне делает это автоматически. Плюсом к этому к запросам которые конкретно отправляют данные входа надо помимо этих куков присобачить еще и константные, которые получаются откуда-то из js. Это oxxfgh и oyystart. Просто скопируйте их из вашего запроса (который уже делали) и добавьте их к кукам, полученным из редиректов. А вообще, – лучше изучите мой код, или просто используйте; руби – почти как питон.

MrMarvel commented 2 years ago

Большое вам спасибо. Теперь авторизация заработала! Вам +rep