Как реализовать интеллектуальную блокировку Google для входа в одно касание

Я хочу внедрить регистрацию Google в одно касание и автоматический вход на своем веб-сайте с помощью документации https://developers.google.com/identity/one-tap/web/, но я не понимаю, как реализовать на python.

def smartlock(request):
    try:
        CLIENT_ID='*******'
        csrf_token_cookie = self.request.cookies.get('g_csrf_token')
        if not csrf_token_cookie:
            webapp2.abort(400, 'No CSRF token in Cookie.')
        csrf_token_body = self.request.get('g_csrf_token')
        if not csrf_token_body:
            webapp2.abort(400, 'No CSRF token in post body.')
        if csrf_token_cookie != csrf_token_body:
            webapp2.abort(400, 'Failed to verify double submit cookie.')
        # Specify the CLIENT_ID of the app that accesses the backend:
        idinfo = id_token.verify_oauth2_token(csrf_token_cookie, requests.Request(), CLIENT_ID)

        # Or, if multiple clients access the backend server:
        # idinfo = id_token.verify_oauth2_token(token, requests.Request())
        # if idinfo['aud'] not in [CLIENT_ID_1, CLIENT_ID_2, CLIENT_ID_3]:
        #     raise ValueError('Could not verify audience.')

        if idinfo['iss'] not in ['accounts.google.com', 'https://accounts.google.com']:
            raise ValueError('Wrong issuer.')

        # If auth request is from a G Suite domain:
        # if idinfo['hd'] != GSUITE_DOMAIN_NAME:
        #     raise ValueError('Wrong hosted domain.')

        # ID token is valid. Get the user's Google Account ID from the decoded token.
        userid = idinfo['sub']
    except ValueError:
        # Invalid token
        pass
'''

person Preeti Bhagat    schedule 11.07.2020    source источник


Ответы (1)


Как указано в разделе «Ключевой момент» документа эта страница: токен идентификатора возвращается в поле учетных данных вместо поля g_csrf_token.

Итак, вам нужно получить idinfo с кодом, как показано ниже:

credential = self.request.get('credential')

idinfo = id_token.verify_oauth2_token(credential, requests.Request(), CLIENT_ID)

Параметр g_csrf_token предназначен для другой цели. Это гарантирует, что запрос был отправлен со страницы в вашем собственном домене, чтобы предотвратить межсайтовые атаки подделки запросов.

person Guibin    schedule 15.07.2020