【发布时间】:2019-03-19 07:17:12
【问题描述】:
我正在尝试使用 Python 和 Falcon Web 框架通过社交平台(Github、Facebook、Instagram)为带有登录选项的 RESTfull API 实现 OAuth2 服务器。 但我一直在努力理解这件事应该如何工作。
1.1。在 API 方面,我正在创建一个端点 /auth/login/github,它基本上会告诉移动应用程序将客户端重定向到 Github.com 授权页面 - github.com/login/oauth/authorize
1.2.在 Github 授权页面上,用户将看到以下屏幕:
1.3.按下 Authorize 后,用户将被带到 callback 参数(Github OAuth 服务配置)中指定的页面,其中包含新授予的临时授权码。在我的例子中,URL 看起来像:my.api.com/auth/callback/github?code=AUTH_CODE
2.1。收到回调请求后,我正在解析/提取传递的授权码并从后端查询 Github.com 以兑换授权码并获取访问令牌(使用我的 Client ID 和 Client Secret 向 github.com/login/oauth/access_token 发送 POST 请求)
2.2.如果一切顺利,Github 将使用 Access Token 回复我的 POST 请求,我可以使用它来获取用户个人资料详细信息(例如电子邮件)
3.1。现在我知道通过 Github 的授权是成功的(因为我收到了用户的电子邮件),我可以向该用户授予 我自己的访问令牌,这样他就可以查询我的 API 端点。我只需添加随机生成的 OAuth2 令牌 并将其插入到我的数据库中,同时通过使用深层链接将用户重定向到移动应用程序(例如:myapp://token)将相同的令牌返回给用户.
3.2.最后,移动应用可以通过在每个请求中添加以下标头来查询我的 API 端点 Authorization: Bearer 0b79bab50daca910b000d4f1a2b675d604257e42
这有意义吗?这是对 RESTfull API 进行社交授权的正确方法吗?
【问题讨论】:
标签: python oauth oauth-2.0 falconframework authlib