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

Но для входа в Facebook их документы о том, как проверить его в бэкэнде, очень запутаны (по состоянию на 9 апреля 2017 г.). Несмотря на то, что процесс довольно простой, он все же должен быть более понятным.

  1. Получите токен доступа

На одной из самых общедоступных страниц с документами мы видим, что «вам ничего не нужно». Однако это всего лишь маркетинговое предложение, игнорируйте его напрямую. Несмотря на то, что ответ SKD входа в Facebook с объектом содержит идентификатор пользователя, имя пользователя, нам все равно нужно получить и проверить его снова, используя accessToken на нашем собственном внутреннем сервере.

response.authResponse.accessToken

Но как это проверить.

2. app_id, user_id

Facebook немного объясняет это на той же странице документа. Поэтому нам нужно проверить идентификатор приложения и идентификатор пользователя, а также страницу «вручную создать поток входа». Но это все равно ничего не значит.

3. input_token и access_token

После перенаправления на другую страницу документа мы можем получить еще одну подсказку. На самом деле нам нужно проверить input_token и access_token. Что здесь может быть запутано, так это то, что input_token здесь на самом деле означает access_token, который мы получаем с первого шага, токен access_token здесь на самом деле означает что-то еще. Но… Так что же такое access_token?

Прокрутите вниз до той же страницы документа, еще одна подсказка:

4. app access_token

Перейдя на другую страницу документа, вы увидите описания четырех типов токенов. Итак, настоящее полное имя второго access_token на шаге 3 - app access_token. Следующим шагом является переход на страницу документа «получить токен доступа к приложению с помощью межсерверного вызова», чтобы узнать, как его получить.

5. Создайте токен доступа к приложению.

Наконец, мы получаем API. Но нам все еще нужны три вещи: app-id, app-secret, доменное имя этого Graph API.

6. Graph API, app-id, app-secret.

Посмотрите где-нибудь еще и предположите, доменное имя адреса Graph API должно быть таким же:

Найдите App-id, app-secret на странице My App:

7. Начните кодирование.

Наконец-то мы можем начать кодирование

#Send the first accessToken returned by Facebook SDK to backend
userToken = request.form['token']
#copy clientId, clientSecret from MY APP Page
clientId = xxxxxxxxxxxx
clientSecret = xxxxxxxxxxxxx
appLink = 'https://graph.facebook.com/oauth/access_token?client_id=' + clientId + '&client_secret=' + clientSecret + '&grant_type=client_credentials'
#From appLink, retrieve the second accessToken: app access_token
appToken = requests.get(appLink).json()['access_token']
link = 'https://graph.facebook.com/debug_token?input_token=' + userToken + '&access_token=' + appToken
try:
    userId = requests.get(link).json()['data']['user_id']
except (ValueError, KeyError, TypeError) as error:
    return error
return userId

Жизнь - это загадка.