Вход в Google для Python Google App Engine

Я создал проект с использованием Python в Google App Engine. Я хочу использовать вход Google на своем веб-сайте.

Я пытался использовать вход Google для Интернета, и он работает хорошо, но я не знаю, как выполнять вызовы API с сервера, чтобы убедиться, что пользователь вошел в систему.

Я пытался использовать пользователей ==> user = users.get_current_user() Затем использовать идентификатор пользователя для вызовов API ==> "https://www.googleapis.com/plus/v1/people/"+ self.request.get('id') +"?fields=image&key=SOME_KEY"

Проблема в том, что идентификатор не тот, который я должен использовать. когда я сравниваю этот идентификатор и тот, который я получаю в javascript, они не совпадают. Кроме того, в веб-API они упомянули, что я не должен отправлять этот идентификатор на сервер напрямую (я не знаю причины). Итак, я хочу знать, как я могу получить правильный идентификатор в своем приложении Python.

// Не отправляйте это напрямую на ваш сервер!

<html lang="en">
  <head>
    <meta name="google-signin-scope" content="profile email">
    <meta name="google-signin-client_id" content="YOUR_CLIENT_ID.apps.googleusercontent.com">
    <script src="https://apis.google.com/js/platform.js" async defer></script>
  </head>
  <body>
    <div class="g-signin2" data-onsuccess="onSignIn" data-theme="dark"></div>
    <script>
      function onSignIn(googleUser) {
        // Useful data for your client-side scripts:
        var profile = googleUser.getBasicProfile();
        console.log("ID: " + profile.getId()); // Don't send this directly to your server!
        console.log('Full Name: ' + profile.getName());
        console.log('Given Name: ' + profile.getGivenName());
        console.log('Family Name: ' + profile.getFamilyName());
        console.log("Image URL: " + profile.getImageUrl());
        console.log("Email: " + profile.getEmail());

        // The ID token you need to pass to your backend:
        var id_token = googleUser.getAuthResponse().id_token;
        console.log("ID Token: " + id_token);
      };
    </script>
  </body>
</html>

person Arman Fatahi    schedule 09.01.2017    source источник
comment
Помогают ли документы по внутренней аутентификации? developers.google.com/identity/sign-in/web/backend- auth ... есть пример декодирования токена ID с библиотекой Python. Идентификатор открытого текста небезопасен и может быть подделан, поэтому вы не можете использовать его для внутренней аутентификации, вам необходимо отправить и проверить токен идентификатора и извлечь из него значения.   -  person Steven    schedule 10.01.2017


Ответы (2)


Вы не можете использовать идентификатор пользователя для выполнения вызовов API. Когда вы выполняете вызовы API к серверам Google, в зависимости от API, вам необходимо передавать разные параметры. Например, если вы хотите перечислить ярлыки, доступные в вашем gmail, вы собираетесь чтобы использовать API Gmail и передать labelid,userid в запросе на получение. Вот документация для приведенного выше примера. https://developers.google.com/gmail/api/v1/reference/users/labels/get Вы можете поэкспериментировать с этим API, используя поле «Попробуйте этот API», предоставленное Google. Как и в этом примере, все продукты Google имеют разные API для разных функций, и вы должны передавать разные параметры в соответствии с предоставленной ими документацией.

person Bravin Balasubramaniam    schedule 09.01.2017
comment
Мне пришлось передать токен аутентификации на серверную часть, чтобы использовать API, который мне был нужен. - person Arman Fatahi; 11.01.2017

После глубокого поиска в API Google я вижу, что вместо этого они представили способ отправки токена идентификатора. Более подробную информацию можно найти здесь:

https://developers.google.com/identity/sign-in/web/backend-auth

person Arman Fatahi    schedule 09.01.2017