我有一个Django项目,该项目最终将包含三个应用程序。其中两个将是“常规” Django应用程序,第三个是djangorestframework
应用程序。我还计划在某个时候为该项目创建一个桌面客户端。
我希望其余的应用程序成为与数据库通信的唯一实体。因此,我使用requests
从“常规” Django应用程序的视图与其余端点进行通信,并且我将对桌面客户端执行相同的操作。
我希望所有应用程序仅对经过身份验证的用户可用。 ,所以我使用的是Django的身份验证后端。
我的问题是,在视图中使用requests
时,如何将经过身份验证的用户/会话从纯Django应用传递到其余端点。
我设法使用request
的{{1}}在其余的API上进行了身份验证,但这要求我必须以纯文本形式使用用户密码。当然,我可以创建一个技术用户来执行这些请求。但这也意味着每个请求都必须先通过身份验证,这似乎不是最好的方法。
我尝试从提供给视图的HTTPBasicAuth
对象中提取会话cookie,并将其通过request
传递,但没有设法将其放入requests.get
中调用正确的方法。
到目前为止,使用请求和已建立的会话似乎是我最好的选择,特别是因为这也是桌面客户端执行操作的方式。因此,我目前正在寻找向requests.get
提供会话cookie的正确方法,但是我当然愿意寻求更好的解决方案。
答案 0 :(得分:1)
您应该使用令牌。
基本上,django项目中进行的任何身份验证都应使用安全令牌进行管理。
是的,每次发送请求时都应进行身份验证检查。为了使其更快,您可以将令牌存储在内存中。 (您可以使用redis,甚至可以将db加载到内存中或...),但这是正确且常见的方法。甚至django每次都使用其内置函数进行此检查。
DRF文档推荐了一些软件包来管理这些令牌:
我在许多项目中使用了knox,这很好。
基本上要对所有项目或微服务上的用户进行身份验证,您必须从用户那里获取令牌,将其设置为标头或...,以向主数据库或身份验证项目发出请求。
大多数应用程序在标头中使用令牌,您可以将其简单地添加到所有requests
调用中: