Google¶
В этом разделе описана настройка различных служб, предоставляемых Google.
Google OAuth¶
Внимание
Google OAuth deprecation Важно: OAuth 1.0 был официально устаревшим 20 апреля 2012 года и будет закрыт 20 апреля 2015 года. Мы рекомендуем вам перейти на любой из других протоколов.
Google предоставляет ключи Consumer Key
и << 1 >>> зарегистрированным приложениям, но также позволяет незарегистрированным приложениям использовать свою систему авторизации, однако следует помнить, что при этом методе пользователю будет показан баннер безопасности, сообщающий, что приложение не является доверенным.
Проверьте Google OAuth и сделайте свой выбор.
заполнить значения
Consumer Key
иConsumer Secret
:SOCIAL_AUTH_GOOGLE_OAUTH_KEY = '' SOCIAL_AUTH_GOOGLE_OAUTH_SECRET = ''
анонимные значения будут использоваться, если они не настроены так, как описано в их OAuth reference.
установите все необходимые дополнительные рамки в:
SOCIAL_AUTH_GOOGLE_OAUTH_SCOPE = [...]
Google OAuth2¶
Недавно Google запустил поддержку OAuth2, следуя определению в документе OAuth2 draft. It works in a similar way to plain OAuth mechanism, but developers must register an application and apply for a set of keys. Check Google OAuth2 для получения подробной информации.
При создании приложения в Google Console обязательно заполните форму PRODUCT NAME
на API & auth -> Consent screen
.
Чтобы включить поддержку OAuth2:
заполнить
Client ID
иClient Secret
настройки, эти значения можно легко получить, как описано в OAuth2 Registering doc:SOCIAL_AUTH_GOOGLE_OAUTH2_KEY = '' SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET = ''
установка всех необходимых дополнительных прицелов:
SOCIAL_AUTH_GOOGLE_OAUTH2_SCOPE = [...]
Проверьте, какие приложения могут быть включены в их Google Data Protocol Directory.
Вход в Google+¶
Google+ Sign In работает во многом как OAuth2, но большая часть начальной работы выполняется их Javascript, который затем вызывает определенный обработчик для завершения процесса аутентификации.
Для включения бэкенда создайте приложение, используя Google console и следуя шагам из official guide. Не забудьте включить API Google+ в консоли.
Заполните ключевые параметры, посмотрев в консоли Google подраздел
Credentials
внутриAPI & auth
:AUTHENTICATION_BACKENDS = ( ... 'social_core.backends.google.GooglePlusAuth', ) SOCIAL_AUTH_GOOGLE_PLUS_KEY = '...' SOCIAL_AUTH_GOOGLE_PLUS_SECRET = '...'
SOCIAL_AUTH_GOOGLE_PLUS_KEY
соответствует переменнойCLIENT ID
.SOCIAL_AUTH_GOOGLE_PLUS_SECRET
соответствует переменнойCLIENT SECRET
.Добавьте кнопку входа в ваш шаблон, вы можете использовать кнопку SDK или добавить свою собственную и прикрепить к ней обработчик нажатия (проверьте Google+ Identity Sign-In документацию об этом):
<div id="google-plus-button">Google+ Sign In</div>
Добавьте сниппет Javascript в тот же шаблон, что и выше:
<script src="https://apis.google.com/js/api:client.js"></script> <script type="text/javascript"> gapi.load('auth2', function () { var auth2; auth2 = gapi.auth2.init({ client_id: "<PUT SOCIAL_AUTH_GOOGLE_PLUS_KEY HERE>", scope: "<PUT BACKEND SCOPE HERE>" }); auth2.then(function () { var button = document.getElementById("google-plus-button"); console.log("User is signed-in in Google+ platform?", auth2.isSignedIn.get() ? "Yes" : "No"); auth2.attachClickHandler(button, {}, function (googleUser) { // Send access-token to backend to finish the authenticate // with your application var authResponse = googleUser.getAuthResponse(); var $form; var $input; $form = $("<form>"); $form.attr("action", "/complete/google-plus"); $form.attr("method", "post"); $input = $("<input>"); $input.attr("name", "id_token"); $input.attr("value", authResponse.id_token); $form.append($input); // Add csrf-token if needed $(document.body).append($form); $form.submit(); }); }); }); </script>
Выход из системы
Выход из системы может быть сложным при использовании SDK платформы, так как он может вызвать автоматический вход в систему при прослушивании изменения статуса пользователя. При использовании метода, показанного выше, этого не произойдет, но если пользовательский интерфейс больше зависит от значений SDK, чем от бэкенда, то все может легко рассинхронизироваться. Чтобы предотвратить это, пользователь должен выйти из платформы Google+. Этого можно добиться, выполнив следующие действия:
<script type="text/javascript"> gapi.load('auth2', function () { var auth2; auth2 = gapi.auth2.init({ client_id: "{{ plus_id }}", scope: "{{ plus_scope }}" }); auth2.then(function () { if (auth2.isSignedIn.get()) { $('#logout').on('click', function (event) { event.preventDefault(); auth2.signOut().then(function () { console.log("Logged out from Google+ platform"); document.location = "/logout"; }); }); } }); }); </script>
Google OpenID¶
Google OpenID works straightforward, no settings are needed. Domains or emails whitelists can be applied too, check the whitelists settings for details.
Идентификация пользователя¶
Дополнительную поддержку статических и уникальных идентификаторов Google Profile ID вместо использования адреса электронной почты для привязки аккаунта можно включить с помощью:
SOCIAL_AUTH_GOOGLE_OAUTH_USE_UNIQUE_USER_ID = True
или:
SOCIAL_AUTH_GOOGLE_OAUTH2_USE_UNIQUE_USER_ID = True
в зависимости от используемых бэкендов.
Обновить жетоны¶
Чтобы получить токен обновления OAuth2 вместе с токеном доступа, необходимо передать дополнительный аргумент: access_type=offline
. Чтобы сделать это с помощью входа в Google+:
SOCIAL_AUTH_GOOGLE_PLUS_AUTH_EXTRA_ARGUMENTS = {
'access_type': 'offline'
}
Изношенность диапазонов¶
Google отказывается от полномасштабных диапазонов ссылок Sept 1, 2014 в пользу Google+ API
и недавно введенных более коротких имен диапазонов. Но python-social-auth
уже представил изменение диапазонов в e3525187, которое было выпущено в v0.1.24
.
Но, чтобы включить новые диапазоны, приложение требует, чтобы Google+ API
был включен в приборной панели Google console, изменение происходит быстро и довольно просто, но если любой разработчик желает продолжать использовать старые диапазоны, это возможно с помощью следующих настроек:
# Google OAuth2 (google-oauth2)
SOCIAL_AUTH_GOOGLE_OAUTH2_IGNORE_DEFAULT_SCOPE = True
SOCIAL_AUTH_GOOGLE_OAUTH2_SCOPE = [
'https://www.googleapis.com/auth/userinfo.email',
'https://www.googleapis.com/auth/userinfo.profile'
]
# Google+ SignIn (google-plus)
SOCIAL_AUTH_GOOGLE_PLUS_IGNORE_DEFAULT_SCOPE = True
SOCIAL_AUTH_GOOGLE_PLUS_SCOPE = [
'https://www.googleapis.com/auth/plus.login',
'https://www.googleapis.com/auth/userinfo.email',
'https://www.googleapis.com/auth/userinfo.profile'
]
Чтобы облегчить изменения, старый API и диапазоны все еще поддерживаются приложением, новые значения являются вариантом по умолчанию, но если у вас возникли проблемы с их поддержкой, вы можете вернуться к старым значениям по умолчанию, определив этот параметр:
SOCIAL_AUTH_GOOGLE_OAUTH2_USE_DEPRECATED_API = True
SOCIAL_AUTH_GOOGLE_PLUS_USE_DEPRECATED_API = True