【发布时间】:2020-11-15 05:59:41
【问题描述】:
我正在学习 Django,并且想开发一个应用程序,该应用程序可以访问 Microsoft Graph API 上的数据,供 Outlook 服务的用户使用。
似乎最干净的方法是使用像 django-all-auth 这样的包来处理在后端获取和存储授权令牌。 Graph API 网站上还有一个使用 python-social-auth 的示例。
但是,我被告知 here 我可以使用像 jQuery 这样的库来直接调用 API,这意味着从 3rd 方 API 返回的 JSON 数据可以绕过我的服务器并直接进入用户的浏览器。
对于需要授权的第 3 方 API,我需要从 django 后端获取身份验证令牌到前端,以便在 Ajax 请求中使用它。
我很欣赏在浏览器中使用隐式或 PKCE 流的选项。
但是,作为替代方案,我有一个想法,即我可以使用服务器端 OAuth 流将访问令牌和刷新令牌存储在后端,然后将身份验证访问令牌从 django 后端发送到用户的浏览器从那里安全地存储和使用。
在我看来,这样做的好处是,如果用户的访问令牌过期,您可以调用后端以使用刷新令牌以提供新的身份验证令牌,从而要求用户登录在更少的时间内。
我也看不出这比隐式流程更安全,尽管我没有看到它并不意味着它不存在!
我知道我必须使用 SSL 来避免任何恶意行为者窥探令牌。我还需要考虑 CSRF 和 XSS 漏洞,但幸运的是 django 提供了针对这两者的解决方案。
这种方法会是一个坏主意并被认为是不好的做法吗?
我考虑这一点的理由是,如果我可以在将 JSON 响应发送到用户的浏览器之前,在页面模板中删除呈现 JSON 响应的中间步骤,它将大大减少我的服务器的开销。
【问题讨论】:
标签: python jquery django oauth-2.0