2

我正在尝试通过 Python Flask 支持 OAuth2 登录,所以我想处理一个如下所示的 URL:

    http://myserver/loggedIn#accessToken=thisIsReallyImportant

但是当我处理回调时,它似乎只是删除了 URL 中 # 之后的所有字符,其中包含重要的 Oauth 访问令牌。我如何获得这些信息?它不包含在 request.url

ETA:我可以使用 Javascript 中的 window.location 在客户端 javascript 中检索它,但随后我必须将它传递回服务器,这感觉有点做作,但也许 Oauth2 就是这样完成的?

4

2 回答 2

5

来自RFC

片段标识符在信息检索系统中具有特殊作用,作为客户端间接引用的主要形式 [...] 片段标识符不用于特定于方案的 URI 处理;相反,片段标识符在取消引用之前与 URI 的其余部分分开

因此,烧瓶会在“#”之后丢弃所有内容。如果要将这些转发到服务器,则必须在客户端提取它们并通过查询参数或 URL 路径的一部分将它们传递给服务器。

于 2013-09-12T04:20:22.140 回答
2

您正在使用不正确的 OAuth 2 授权类型(隐式授权)来执行您想要执行的操作。正如您观察到的那样,隐式授权在片段中提供令牌供 javascript 客户端使用。还有另一种类型的授权,授权代码,它与此类似,但在 URI 查询中提供它,您可以从 Flask 访问它。

您可以将两者与您为授权创建的重定向 URI 区分开来,如果它有 response_code=code,那么您就在正确的轨道上。您当前使用 response_code=token。

如果您使用 Facebook,请查看https://developers.facebook.com/docs/facebook-login/login-flow-for-web-no-jssdk/

对于 Google,请查看https://developers.google.com/accounts/docs/OAuth2WebServer

您可能还对https://flask-oauthlib.readthedocs.org/en/latest/感兴趣,它可以帮助您使用 OAuth。

于 2013-09-13T11:05:52.770 回答