gpt4 book ai didi

google-app-engine - 如何使用 Python 后端通过 HTTPS POST 接收 id token ?

转载 作者:行者123 更新时间:2023-12-03 21:25:57 24 4
gpt4 key购买 nike

我正在开始后端和 API 处理,并希望获得一些有关如何使用 Python 通过 HTTPS POST 接收 token 的指针、资源或提示。

我正在关注 Google 开发者页面 ( Google sign-in Tutorial ) 上的登录教程。

使用 JavaScript 我可以 getBasicProfile()信息,但本教程建议不要通过此配置文件对象与我的后端通信。相反,他们通过发送带有 HTTPS POST 请求的 ID token 来指示进行身份验证。

与 API 的第一次连接(我相信)是在用户单击登录按钮时使用 JavaScript 进行的:

function onSignIn(googleUser) {
var id_token = googleUser.getAuthResponse().id_token;
...
}

然后,他们发送 token ,如:
var xhr = new XMLHttpRequest();
xhr.open('POST', 'http://localhost:8080/tokensignin');
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
xhr.onload = function() {
console.log('Signed in as: ' + xhr.responseText);
};
xhr.send('idtoken=' + id_token);

我的疑问是,如何在我的 Python 后端上获取此 id_token(而不是通过 Cookie 集)?

教程指示:
from google.oauth2 import id_token
from google.auth.transport import requests

# (Receive token by HTTPS POST)
# ... <== this is where I am at a loss!! Beginner tutorial??

try:
idinfo = id_token.verify_oauth2_token(token, requests.Request(), CLIENT_ID)

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

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

(编辑):

我的尝试

我的理解是通过使用 xhr.send('idtoken=' + id_token);我会向 xhr.open('POST', 'http://localhost:8080/tokensignin'); 中声明的 URL 发布一个带有 id_token 的新 header

但是,到目前为止,我的尝试是尝试使用 urllib2 读取发布到此 URL 的标题。 python中的库。

所以,在我的 main.py 上文件我尝试查看新标题是否已发布,如下所示:
import urllib2

class Glogin(webapp2.RequestHandler): # url will be '/glogin'
def get(self):
url = 'http://localhost:8080/tokensignin'
try:
# Write the headers out (I expect to see '(idtoken, id_token)' now included)
result = urllib2.urlopen(url)
self.response.out.write(result.headers.items())

except urllib2.URLError:
logging.exception('Caught exception fetching url')

但是,我发现的只是之前存在的那些 header (即 idtoken 从未由 JS send() 方法发布??):
[('cache-control', 'no-cache'), ('content-length', '6870'), ('server', 'Development/2.0'), ('date', 'Fri, 19 Jan 2018 06:17:45 GMT'), ('content-type', 'text/html; charset=utf-8'), ('connection', 'close')]

最佳答案

您必须创建一个 token在你到达之前的变量try陈述。
您可以使用 Flask 的 request并按如下方式捕获 token :

token = request.form["idtoken"]
所以你的最终代码看起来像这样:
token = request.form["idtoken"]
try:
idinfo = id_token.verify_oauth2_token(token, requests.Request(), CLIENT_ID)

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

# ID token is valid. Get the user's Google Account ID from the decoded token.
userid = idinfo['sub']
except ValueError:
# Invalid token
pass
迟到的答复,但我刚刚解决了这个问题,我认为其他人将来可能会发现这很有用。

关于google-app-engine - 如何使用 Python 后端通过 HTTPS POST 接收 id token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48326862/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com