gpt4 book ai didi

google-app-engine - Python Google Drive 示例应用程序 (DrEdit) 中 OAuth 流程的说明

转载 作者:太空宇宙 更新时间:2023-11-03 15:34:37 27 4
gpt4 key购买 nike

我在理解 DrEdit 示例应用程序中介绍的身份验证期间重定向的概念时遇到了问题。这里的 redirect_url 是通过从请求 url 中剥离所有参数来设置的:

  def CreateOAuthFlow(self):
"""Create OAuth2.0 flow controller

This controller can be used to perform all parts of the OAuth 2.0 dance
including exchanging an Authorization code.

Args:
request: HTTP request to create OAuth2.0 flow for
Returns:
OAuth2.0 Flow instance suitable for performing OAuth2.0.
"""
flow = flow_from_clientsecrets('client_secrets.json', scope='')
# Dynamically set the redirect_uri based on the request URL. This is extremely
# convenient for debugging to an alternative host without manually setting the
# redirect URI.
flow.redirect_uri = self.request.url.split('?', 1)[0].rsplit('/', 1)[0]
return flow

当从 Google Drive UI 调用应用程序时(使用获取参数 codestate 向应用程序的根 url 发出获取请求),应用程序会检查它是否已获得授权向 Google 云端硬盘发出请求。如果访问权限已被撤销,它会尝试使用以下代码重新授权自己,我相信:

creds = self.GetCodeCredentials()
if not creds:
return self.RedirectAuth()

其中 RedirectAuth() 定义为:

  def RedirectAuth(self):
"""Redirect a handler to an authorization page.

Used when a handler fails to fetch credentials suitable for making Drive API
requests. The request is redirected to an OAuth 2.0 authorization approval
page and on approval, are returned to application.

Args:
handler: webapp.RequestHandler to redirect.
"""
flow = self.CreateOAuthFlow()

# Manually add the required scopes. Since this redirect does not originate
# from the Google Drive UI, which authomatically sets the scopes that are
# listed in the API Console.
flow.scope = ALL_SCOPES

# Create the redirect URI by performing step 1 of the OAuth 2.0 web server
# flow.
uri = flow.step1_get_authorize_url(flow.redirect_uri)

# Perform the redirect.
self.redirect(uri)

我的问题是,当我从我的 Google Dashboard 撤销对应用程序的访问并尝试通过 Google Drive UI 打开它时,它会将我重定向到授权页面,然后在我授权后重定向回应用程序,但它设法保留状态(从 Drive UI 传递的获取参数)。我认为这与代码描述的内容不一致,我想知道是否对此行为有任何解释。可以在此处找到 DrEdit 应用程序的托管版本:http://idning-gdrive-test.appspot.com/

最佳答案

在从 Drive UI 启动应用程序的情况下,永远不会触及该代码路径。重定向到授权端点是直接从 Drive 启动的。换句话说,路径是:

Drive -> auth -> DrEdit

当它到达应用程序时,用户已经做出了决定。状态在状态查询参数中传递。

要查看您引用的代码路径,请再次撤消访问权限。但不是从云端硬盘开始,而是尝试直接加载应用程序。您可能还需要删除该应用程序的 cookie。无论如何,在这种情况下,当应用程序加载时,它会检测到用户未被授权并重定向到 auth 端点:

DrEdit -> auth -> DrEdit

希望对您有所帮助。

关于google-app-engine - Python Google Drive 示例应用程序 (DrEdit) 中 OAuth 流程的说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11484982/

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