【发布时间】:2014-12-25 18:32:40
【问题描述】:
让 REST 端点支持 basic authentication 并使用 XHR 的正确方法是什么?
我正在使用 Django REST Framework (DRF) 创建一组 REST 端点。这些端点将由单页应用程序 (SPA) 通过一组 XHR (AJAX) 调用以及来自 C++ 应用程序的调用使用。 C++ 应用程序当前使用的是 Qt 框架。在 Qt 框架内,我使用QNetworkAccessManager 和QAuthenticator。 authenticationRequired 信号在“每当最终服务器请求身份验证时”发出,我相信这是由 401 响应中的 WWW-Authenticate 标头驱动的(我目前正在使用 basic authentication)。
我试图弄清楚如何在 Django REST 中设置身份验证,以使我的 SPA 和 C++ 应用程序都满意。我发布了这个问题:Why does SessionAuthentication in Django REST Framework Never Return HTTP401,我了解到,如果我将第一个身份验证类设置为BasicAuthentication,我可以从 DRF 获得 401(带有WWW-Authenticate 标头)。然而,这会导致浏览器在收到 401 时弹出一个模式登录对话框。
让浏览器满意并为 401 提供 WWW-Authenticate 标头的最佳方法是什么?一种想法是对来自 C++ 应用程序的请求使用一个身份验证类,对来自浏览器的请求使用不同的身份验证类。
Chrome 上的登录框:
【问题讨论】:
标签: django rest django-rest-framework django-authentication