Когда вы решите отказаться от создания системы входа с паролем самостоятельно и выбрать систему входа стороннего производителя, безопасность является наиболее важным вопросом. В документации Google есть очень четкое руководство по обеспечению безопасности процесса входа в систему на сервере.
Но для входа в Facebook их документы о том, как проверить его в бэкэнде, очень запутаны (по состоянию на 9 апреля 2017 г.). Несмотря на то, что процесс довольно простой, он все же должен быть более понятным.
- Получите токен доступа
На одной из самых общедоступных страниц с документами мы видим, что «вам ничего не нужно». Однако это всего лишь маркетинговое предложение, игнорируйте его напрямую. Несмотря на то, что ответ 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
Жизнь - это загадка.