Django REST API设置允许主机为单个端点



我想为不同的Django REST API端点的ALLOWED_HOSTS设置不同的值。这可能吗?以下是更多细节:

我有一个由Django REST API后端,React前端,Postgresdb和nginx组成的设置,每个都运行在docker容器中,由docker compose管理。我暴露了Django API端点,这些端点是由前端从用户的浏览器访问的,所以我将前端的域添加到允许的主机中。但是,我有一个特定的API端点,它应该只接受来自前端docker容器的请求,而不接受来自外部的请求。它应该只用于前端和后端容器之间的通信。所以在这种情况下,我将不得不限制允许的主机到docker容器的ip。这两种设置都是可行的,但我只能在Django全局设置中选择其中一种。我的问题是:是否有可能为单个端点/url设置允许的主机?

我想如果没有干净的方法,我可以使用HttpRequest.get_host()运行手动检查,以验证请求主机对容器名称?

这当然是可能的。

在纯Django环境中,我将把它实现为一个Django中间件,它会拦截请求,查看路径和请求主机,源IP,并做它需要做的事情。

在Django REST框架上下文中,我会将其实现为一个额外的身份验证类,因为它可以在需要时访问Django REST框架上下文中。

最后,我建议也要保护这个"秘密"。端点与额外的身份验证-最简单的可能是一个额外的秘密头(X-Nik-Secret: very?-))是前端容器所知道的。这种检查可以类似地在中间件或身份验证中实现。

最新更新