我正在尝试使用Google身份服务SDK实现授权代码模型,如Use Code Model中所述。我希望使用弹出模式。
我设法初始化了代码客户端,并收到了一个包含以下Javascript代码的授权代码:
tokenClient = google.accounts.oauth2.initCodeClient({
client_id: CLIENT_ID,
scope: SCOPES,
callback: '', // defined later
ux_mode: 'popup',
})
...
tokenClient.requestCode({prompt: 'consent'});
当我在回调中收到授权代码时,我将它中继到我的平台上的端点,如步骤5:交换刷新和访问令牌的授权代码,我尝试用Python交换刷新和访问令牌的授权代码:
flow = google_auth_oauthlib.flow.Flow.from_client_secrets_file(
'client_secret.json',
scopes=scopes,
state=state
redirect_uri=redirect_uri
)
flow.fetch_token(code=code)
问题是我使用这个代码时redirect_uri是空的,我会得到一个错误“missing redirect_uri parameter”。如果我指定了一个在Google Cloud Console中定义的重定向URL,我会得到一个错误“redirect_uri mismatch”。如果我尝试使用与初始弹出请求中发送的redirect_uri相同的redirect_uri(在这种情况下,Google似乎使用storagerelay://...
),我得到一个错误,“它不符合Google Oauth2策略”。
1条答案
按热度按时间jtoj6r0c1#
在任何授权流中,当您在客户端获得授权码,然后将其传递给服务器进行令牌交换时,似乎都必须使用字符串文字
"postmessage"
作为redirect_uri
的设置。奇怪的是,大多数google客户端库的文档中似乎都没有这个非常重要的事实,但它对我很有效。希望这能有所帮助!