早上好,下午好,晚上好
我一直在尝试使用带有Django和的OAuth工具包来实现资源服务器与身份验证服务器的分离,我被卡住了
首先,我已经尝试了以下方法:
按照本tutorial教程进行操作,在使用python manage.py runserver为项目提供服务时,会起作用
整个结构是我使用Postmen作为客户端,请求资源服务器,并使用auth服务器检查经过身份验证的用户,因此资源和auth服务器之间存在内省过程
正如我所提到的,只有当我使用python manage.py runserver为项目提供服务时,的整个想法才起作用。当在Docker Compose中部署项目时,使用Nginx和Gunicorn为项目提供服务,头痛就来了
This was the final error - Max retries exceeded with url: /o/introspect/
When I tracked back to the root - Introspection: Failed POST to localhost:8000/o/introspect/ in token lookup
This is error in the client app - "Authentication credentials were not provided."
我发现当访问令牌过期或被撤销时,系统尝试从auth server获取到资源服务器的新访问令牌时,就会发生此问题
不知何故,内省过程因未知原因而失败
以前有人撞过这堵墙吗
我发现了另一个与确切问题相关的原因
作为docker compose创建服务,每个服务为一个包含项目图像(Django)的容器提供服务。因此,每个项目都是相互隔离的
这会导致在A项目中很难请求B项目,因为B项目的端口在A项目中无法到达
潜在的解决方案可能是使用Nginx服务器代理名称(与docker compose中每个服务的名称相同)发出请求
我还在努力处理这件事!如果有人能帮上忙,我将不胜感激
解决方案已演示
在阅读之前:此解决方案是使用与Docker Compose一起部署的Django OAuth Toolkit来处理项目,这是由于内省请求失败而发生的
首先,让我演示docker compose结构:
docker compose yml文件中有两个Nginx服务器服务处理Django的网络ShopDjangoBN_Nginx和OAuthDjangoBN_Nginx!一般来说,如果我们提供的项目没有docker compose和nginx,您就不会遇到这个问题但是我想,在使用docker技术进行部署时,您可能会遇到这个问题
要设置独立服务器的概念,您需要遵循此tutorial,并且需要在资源服务器项目的Django设置文件中完成以下代码:
这里的关键是'RESOURCE\u SERVER\u INTROSPECTION\u URL'变量!此变量用于从资源向Auth服务器请求内省请求,因此,建议正确设置此url,并且它必须是Auth服务器中的内省端点
接下来,如果您还记得的话,OAuthDjangoBN\u Nginx是一个反向代理服务,它处理对Auth Server的任何请求!从技术上讲,OAuthDjangoBN_Nginx将是我们的Auth服务器主机。所以资源服务器Django设置文件中的自省url如下所示:
以及nginx.conf
这个代理集\标题最好使用env变量设置,我在互联网上找到了一些解决方案,所以不会有问题。设置也很重要,因为反向主机名将是OAuthDjangoBN\u Nginx:,它将不会被识别为有效的主机名,因此,请设置它
好的,我认为如果有人遇到或将遇到相同的问题,这个想法可以是一个解决方案。我也相信这仍然是一种困惑。如果你撞到墙了就告诉我
相关问题 更多 >
编程相关推荐