授权令牌:Django后端的OAuth,前端调用第三方API.这是个坏主意吗



我正在学习Django,并有一个应用程序的想法,可以为outlook服务的用户访问Microsoft Graph API上的数据。

似乎最干净的方法是使用django-all-auth这样的包来处理在后端获取和存储授权令牌。在Graph API网站上还有一个使用python-social-auth的示例。

然而,我在这里被告知,我可以使用像jQuery这样的库来直接进行API调用,这意味着从第三方API返回的JSON数据可以绕过我的服务器,直接进入用户的浏览器。

由于第三方API需要授权,我需要将auth令牌从django后端获取到前端,以便在Ajax请求中使用。

我很感激在浏览器中使用隐式或PKCE流是一种选择。

然而,作为一种替代方案,我有一个想法,我可以使用服务器端OAuth流在后端存储访问令牌和刷新令牌,然后将身份验证访问令牌从django后端发送到用户的浏览器,以便在那里安全地存储和使用。

在我看来,这样做的好处是,如果用户的访问令牌过期,您可以调用后端使用刷新令牌来提供新的身份验证令牌,从而要求用户登录的次数更少。

我也不认为这会比隐含流更不安全,尽管我没有看到它并不意味着它不存在!

我知道我必须使用SSL来避免任何恶意行为者窥探令牌。我还需要考虑CSRF和XSS漏洞,但谢天谢地,django提供了两者的解决方案。

这种方法会是一个坏主意,也会被认为是一种坏做法吗?

我考虑这一点的理由是,如果我能在JSON响应发送到用户浏览器之前,省去在页面模板中呈现JSON响应的中间步骤,这将大大减少服务器的开销。

我认为我所描述的内容在这里得到了解决,尽管使用了不同的框架。

如果其他人读到这篇文章,并认为我的提议有问题,请告诉我。

最新更新