【发布时间】:2015-11-11 05:18:53
【问题描述】:
我正在使用 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 应用程序在其他用户无法查看和复制身份验证的情况下进行身份验证。
非常感谢您的任何建议。
【问题讨论】:
-
通常您在授权标头中而不是在 url 中传递密钥/身份验证令牌。使用默认 django 登录时使用会话身份验证,然后您也将被身份验证以访问 api,您需要将会话身份验证添加到 rest 框架设置。
-
您可以使用会话身份验证或令牌身份验证,或同时使用两者。但是,正如@PieterHamman 所提到的,用户需要进行身份验证才能使用 API。认证后,用户需要在每个请求头中传递 session_id/token。有关会话与令牌身份验证之间的比较,请参阅:security.stackexchange.com/questions/81756/… 您还可以查看 django-rest-framework-jwt,它是用于实现 JWT 并具有内置身份验证的 drf 包。
标签: django authentication django-rest-framework