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

Неверный токен при действии с другого айпи адреса #33

Closed
yarchiko opened this issue Sep 26, 2013 · 23 comments
Assignees
Labels

Comments

@yarchiko
Copy link

авторизовался и получил токен. сделал пост на стену. все ок.
айпи адрес сменился, делаю пост на стену, возвращается ошибка от вк:
"error_msg" = "User authorization failed: access_token was given to another ip address.";

из логов:
2013-09-26 22:08:14.247 New token: {
"Creation time" = 1380218891;
"Expiration time" = 1380305291;
Permissions = (
photos,
wall,
friends
);
Token = e40ce65a8ae568248ac6b70b71481eca2c3582c912864db025927e99f7bf4fb1bcb41eac728c3ef7c8c07;
"User ID" = 1;
}

2013-09-26 22:08:16.316 [VKUser currentUser].accessToken.userID 933248fad0d4ae1e9ae309cfe2b2a377cde392a11e0c607ee475395061c0272803c84890c0aa3edfa97d0

2013-09-26 22:08:18.702 [VKRequest connectionDidFinishLoading:]
$0 = 0x0ab28770 {
error = {
"error_code" = 5;
"error_msg" = "User authorization failed: access_token was given to another ip address.";
"request_params" = (
{
key = oauth;
value = 1;
},
{
key = method;
value = "wall.post";
},
{
key = "access_token";
value = 933248fad0d4ae1e9ae309cfe2b2a377cde392a11e0c607ee475395061c0272803c84890c0aa3edfa97d0;
},
{
key = message;
value = test;
},
{
key = "owner_id";
value = 1;
}
);
};
}

@AndrewShmig
Copy link
Owner

Интересная ошибка, раньше на такую не натыкался.
Мне кажется ВК это специально сделали для защиты от "перехватов" токенов доступа. Поэтому при смене айпишника надо обновлять токен доступа.

@yarchiko
Copy link
Author

да скорее всего. просто в vlrequest надо это как-то обрабатывать. вот я к чему)

@AndrewShmig
Copy link
Owner

@yarchiko как-то обрабатывать скорее всего не буду, это уже дело программиста. Может действительно перехватили токен доступа и отправляют запросы с другого айти, что тогда? Нет, пусть разработчик сам решает.

@yarchiko
Copy link
Author

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

@AndrewShmig
Copy link
Owner

@yarchiko либо просто запрашивать offline права.

@yarchiko
Copy link
Author

@AndrewShmig да. но в обсуждении, которое Вы скинули, пишут, что это может быть неправильно.
https://vk.com/topic-1_24428376?post=64196

в любом случае спасибо) смотрю Ваш ASASocialServices, он сейчас поддерживается? нужен фейсбук для иос 5.

@AndrewShmig
Copy link
Owner

@yarchiko зато выход из ситуациии :)
Нет, уже не поддерживается. Баги править буду, а вот допиливать нет.

@Nikaladze
Copy link

@AndrewShmig тоже столкнулся с этим вопросом и вот, что обнаружил - токен обновляется, но при любом первом запросе (у меня LongPoll), вижу что передается старый токен:
2014-04-10 10:53:45.518 Flips[10617:60b] -[AppDelegate VKConnector:webViewDidStartLoad:]
2014-04-10 10:53:57.612 Flips[10617:60b] -[AppDelegate VKConnector:webViewDidFinishLoad:]
2014-04-10 10:54:00.357 Flips[10617:60b] -[AppDelegate VKConnector:accessTokenRenewalSucceeded:]
2014-04-10 10:54:00.361 Flips[10617:60b] Access token: {
"Creation time" = ...
Token = 8d65dc137fb05e065805c600522d0527d194862a56afdddba1aa21589459c78f1698729d996680d33a741;
"User ID" = ...;
}
2014-04-10 10:58:33.676 Flips[10617:60b] -[AppDelegate VKConnector:willHideWebView:]
2014-04-10 10:58:33.760 Flips[10617:3807] void SendDelegateMessage(NSInvocation *): delegate (webView:didFinishLoadForFrame:) failed to return after waiting 10 seconds. main run loop mode: kCFRunLoopDefaultMode
2014-04-10 10:58:36.537 Flips[10617:60b] -[WebService VKRequest:totalBytes:downloadedBytes:]
2014-04-10 10:58:36.539 Flips[10617:60b] 263 394
2014-04-10 10:58:36.542 Flips[10617:60b] -[WebService VKRequest:responseErrorOccured:]
2014-04-10 10:58:36.544 Flips[10617:60b] error: {
"error_code" = 5;
"error_msg" = "User authorization failed: access_token was given to another ip address.";
"request_params" = (
{
key = oauth;
value = 1;
},
{
key = method;
value = "messages.getLongPollServer";
},
{
key = "access_token";
value = 38cb7d16ef7cdac9993c3f09b6e29ef2c2f4725e110d362a2f9b9a224ffe961eec8c1220ebe9a97ab9b05;
},
...
);
}

Как только перезапускаю приложение все работает нормально. Когда делаю запрос:
VKRequestManager *rm = [[VKRequestManager alloc] initWithDelegate:self user:[VKUser currentUser]];
И смотрю в дебагере, что в передается новый токен, но когда делаю Print Description user-а получаю старый (см. на рис.):
2014-04-10 10 57 47 copy

@AndrewShmig
Copy link
Owner

@Nikaladze, хмм... надо посмотреть будет.
Есть возможность исходный код рабочего участка скинуть, с помощью которого я смогу воспроизвести ошибку?

Есть подозрение, что связано это с юзердефолтами и хранилищем.

@AndrewShmig AndrewShmig reopened this Apr 10, 2014
@Nikaladze
Copy link

@AndrewShmig хотел сделать в виде sample, но что-то проделал все тоже самое и токен не обновляется вообще... странно, наверное что-то пропустил

@AndrewShmig
Copy link
Owner

В любом случае, как только получится стабильно воспроизвести ошибку - дайте знать пожалуйста, обязательно проверю в чем может быть проблема и постараюсь исправить в ближайшее время.


С уважением,
Шмиг Андрей Андреевич

Skype: sky-dos
Email: andrewshmig@yandex.ru

On Apr 10, 2014, at 3:02 PM, Nikaladze notifications@github.com wrote:

@AndrewShmig хотел сделать в виде sample, но что-то проделал все тоже самое и токен не обновляется вообще... странно, наверное что-то пропустил


Reply to this email directly or view it on GitHub.

@Nikaladze
Copy link

Обязательно

@Nikaladze
Copy link

@AndrewShmig Sample послал Вам на почту с описанием шагов для воспроизведения проблемы

@AndrewShmig
Copy link
Owner

Получил. Спасибо большое, будем разбираться.


С уважением,
Шмиг Андрей Андреевич

Skype: sky-dos
Email: andrewshmig@yandex.ru

On Apr 10, 2014, at 6:17 PM, Nikaladze notifications@github.com wrote:

Sample послал Вам на почту с описанием шагов для воспроизведения проблемы


Reply to this email directly or view it on GitHub.

AndrewShmig added a commit that referenced this issue Apr 19, 2014
AndrewShmig added a commit that referenced this issue Apr 19, 2014
AndrewShmig added a commit that referenced this issue Apr 19, 2014
@AndrewShmig AndrewShmig removed the Bug label Apr 19, 2014
AndrewShmig added a commit that referenced this issue Apr 22, 2014
AndrewShmig added a commit that referenced this issue Apr 22, 2014
@AndrewShmig AndrewShmig added Bug and removed Question labels Apr 22, 2014
@ichina
Copy link

ichina commented Apr 28, 2014

сорри, что поднимаю снова эту тему, чтонибудь решилось в проблеме обновления токена при сменившемся ip?

@AndrewShmig
Copy link
Owner

@ichina и да, и нет.
Была исправлена ошибка про которую выше писали, касалась она обновления токена доступа после инвалидации его.
Если речь о механизме каком-то дополнительном, то нет. Собственно, не представляю пока, что можно сделать, чтобы проблем с инвалидацией токена доступа не было после смены айпишника, кроме как повторно вызвать окно авторизации и, если никаких пользовательских действий не требуется, обновить токен без отображения UIWebView.

Если есть любые предложения по этому поводу, то готов выслушать и с удовольствием реализовать.

@ichina
Copy link

ichina commented Apr 28, 2014

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

@AndrewShmig
Copy link
Owner

Подумаем над этим. Будет ли по сути реализация такой очереди решать реальные проблемы, а не выдуманные.


С уважением,
Шмиг Андрей Андреевич

Skype: sky-dos
Email: andrewshmig@yandex.ru

On Apr 28, 2014, at 11:03 PM, ichina notifications@github.com wrote:

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


Reply to this email directly or view it on GitHub.

@ichina
Copy link

ichina commented Apr 28, 2014

эта очередь будет очень уместна и полезна в случае если проблема смены ip решится на стороне сдк.

@AndrewShmig
Copy link
Owner

@ichina пожалуй надо будет этим вопросом заняться. А как по вашему должна работать эта очередь для программиста? Должен ли он явно запускать "провалившиеся" запросы в очереди и иметь возможность отменить какие-то из них, или же всё должно быть полностью невидимо для программиста и все запросы после обновления токена должны выполниться?

@ichina
Copy link

ichina commented Apr 28, 2014

Я реализовывал такую вещь с помощью очередей операций NSOperationQueue. пока проблема возобновления токена решается сдкашкой, мы просто останавливаем выполнение операций в очереди, и все провалившиеся запросы закидываем в конец очереди, тем самым у нас начинают накапливаться операции запросов в очереди. когда сдк решит проблему с токеном мы просто включаем выполнение очереди (тоесть просто переключаем булово свойство "isSuspended" у NSOperationQueue) и все запросы начинают переотправляться. ну и наверн нужно будет пробежаться по всем этим запросам и обновить токены

@AndrewShmig
Copy link
Owner

@ichina да, я примерно в таком же ключе думал. Надо проектировать, смотреть. Будем делать.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

4 participants