【问题标题】:Python - Google OAuth2 - Wrong number of segments in tokenPython - Google OAuth2 - 令牌中的段数错误
【发布时间】:2018-09-08 22:34:11
【问题描述】:

我正在尝试将我的 Android Flutter 项目连接到我的 Flask API 服务器,并且客户端应用程序按预期工作。问题是,即使将 OAuth2 访问令牌硬编码到服务器中,也会出现以下错误消息。我很困惑为什么它会发生。关于 Python 后端 OAuth2 处理的 Google 官方文档是 here

错误信息: Wrong number of segments in token: b'ya29.GluNBQsv_8FW2-jjI0w.....

代码:

import flask
from flask import jsonify, request, redirect, url_for
from google.oauth2 import id_token
from google.auth.transport import requests

#### SKIPPED INIT AND OTHER CODE ####

@app.route('/', methods=['POST'])
def index():
    token = "ya29.GluNBQsv_8FW2....." # 129 chars in total

    try:
        idinfo = id_token.verify_oauth2_token(token, requests.Request(), None)
        print(idinfo['email'])
    except Exception as ex:
        print(ex)
        data = {
            'status': 403,
            'message': 'Authorization required',
        }
        response = jsonify(data)
        response.status_code = 403
        return response

【问题讨论】:

  • 那你传递了什么,你能分享你更新的代码
  • 它是一种不同类型的令牌,如答案中所述。我通过使用 access_token 直接向googleapis.com/oauth2/v3/userinfo 发送请求来修复代码。但是,这绝对是一种黑客攻击

标签: python flask google-oauth google-authentication google-api-python-client


【解决方案1】:

您传递的是 access_token 而不是 id_token。 当您启动 Google 登录时,它会向您发送一个“代码”,然后您将其传递给令牌端点,它会为您提供三件事。 access_token、id_token 和 refresh_token(基于条件)。 该函数想要的是 id_token。

【讨论】:

  • 这不是答案,请按原样添加此文本,作为评论。
  • 只需搜索生成该访问令牌的位置,您将在该响应中找到 id_token。
猜你喜欢
  • 1970-01-01
  • 2013-07-31
  • 2015-02-01
  • 1970-01-01
  • 2020-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多