Иногда Facebook не возвращает параметр auth_nonce во время аутентификации - PullRequest
1 голос
/ 19 октября 2011

Я использую параметр auth_nonce во время проверки подлинности на стороне сервера. Однако у меня возникает проблема, когда иногда Facebook не возвращает аргумент auth_nonce на последнем этапе, что, конечно, приводит к сбою аутентификации.

Часто это работает просто отлично. Это те случаи, когда пользователь изначально входит в мое приложение, и я прошу Facebook подтвердить их подлинность (auth_type=reauthenticate). Я никогда не видел этот провал.

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

В этих последних случаях перенаправление URL выглядит примерно так:

  1. http://myapplication.url (замечает, что срок действия токена истек, поэтому отправляет пользователя на ...)
  2. https://www.facebook.com/dialog/oauth?client_id={APP_ID}&redirect_uri=http%3a%2f%2fmyapplication%2eurl%2ffacebook%2fafterlogin&scope=list,of,permissions&display=page&auth_nonce=Vr6EgapnMFIKrbMtVrdcZDTbioGe715pWDtMveA8z4xVNMR5IzGYoPN3rSxf (Facebook перенаправляет их на ...)
  3. https://www.facebook.com/dialog/permissions.request?app_id={APP_ID}&display=page&next=http%3A%2F%2Fmyapplication.url%2Ffacebook%2Fafterlogin&response_type=code&auth_nonce=Vr6EgapnMFIKrbMtVrdcZDTbioGe715pWDtMveA8z4xVNMR5IzGYoPN3rSxf&fbconnect=1&perms=list%2Cof%2Cpermissions (Наконец, мы перенаправлены обратно на ...)
  4. http://myapplication.url/facebook/afterlogin?code={Big long code here}#_=_

Во время этого последнего звонка я получаю следующий URL:

https://graph.facebook.com/oauth/access_token?client_id={APP_ID}&redirect_uri={THE_PROPER_REDIRECT_URL}&client_secret={APP_SECRET}&code={Big long code here}

Ответ, который я получаю, имеет вид:

access_token={AUTH_TOKEN}&expires=5083

Согласно документации (и моему опыту при обычной аутентификации) в окончательном ответе должен быть параметр auth_nonce, который я могу проверить.

Я что-то здесь не так делаю?

...