我正在使用Django v1.8和django-rest-framework v3.2.2。我有一个带有面向公众的API的站点,它也被我自己的站点(在同一域上)作为JavaScript应用程序的Ajax后端使用,仅使用GET。
我希望此API的公共用户在URL中被要求提供key
参数,我将手动发布该参数。但我也希望我的JavaScript应用程序能够使用API,这意味着其他用户不仅可以窃取密钥并使用它。
我已经设置了自定义密钥身份验证as described here,但它运行良好。
但是,我不清楚JavaScript应用程序应该如何使用API。显然我可以在URL中传递一个专用的key
参数,但是其他用户是否能够轻松地发现密钥并使用它?
我认为我需要SessionAuthentication,但我怎么开始做这项工作呢?我看不到有关如何更改JavaScript调用以使用它的任何说明in the DRF documentation。
另外,我不明白SessionAuthentication如何允许Ajax应用程序进行身份验证,而其他用户无法查看和复制身份验证。
非常感谢任何建议。
答案 0 :(得分:1)
我认为我需要SessionAuthentication,但我怎么开始做这项工作呢?我无法在DRF文档中看到有关如何更改JavaScript调用以使用它的任何说明。
SessionAuthentication是Django的一个。它使用会话来验证用户。它对于ajax请求大多是透明的,因为浏览器会自动发送cookie。但是,如果您要发布数据,则需要确保在标题和帖子正文中发送CSRF令牌。
另外,我不了解SessionAuthentication如何允许Ajax应用程序进行身份验证,而其他用户无法查看和复制身份验证。
如上所述,它使用cookie。它们是标题的一部分,因此通常在网址上看不到。 为了确保没有其他人可以窃取用户的会话,您需要通过https运行该网站。 这与常规网站没什么不同。