目标:
使用Docker容器中运行的Flask应用程序中的OIDC。在
背景:
我正在用Flask构建一个web应用程序,并希望使用keyclope来提供访问。为此,我使用Python库flask_-oidc。在
所有服务都在本地运行,其中包含docker compose文件:
我遵循了https://gist.github.com/thomasdarimont/145dc9aa857b831ff2eff221b79d179a的例子,甚至将我的应用程序简化为这样。在
问题:
/private
在示例中)/oidc_callback
)OSError: [Errno 99] Cannot assign requested address
错误。在当cd6{cd6}连接到cd6}时,{>。在
我认为正在发生的事情是,库试图打开与keydocaper服务器的连接,但试图将其绑定到localhost
。这可能会失败,因为在Docker容器中,应用程序被绑定到0.0.0.0
。在
我尝试了:
[WORKS]在容器外运行Gunicorn/Flask应用程序,在容器内运行Keylcoak。在
这表明(对我来说)我的所有设置和代码都是好的,但问题出在Docker<;-->;flask_oidc+之间的交互中。在
问题: 有人能解释一下吗?我真的希望有人有一个工作设置(瓶内码头与烧瓶外罩),并愿意分享这个。在
更新[2018年5月12日] 我想我明白了。我使用PyOIDC手动完成所有步骤并能够进行调试。在
在您自己的计算机(localhost
)上运行Docker中的两个服务时,您会遇到冲突:
localhost:8080
找到keyclope,localhost:5000
来查找应用程序。在localhost
不解析到主机,而是解析到容器中的自身。在http://keycloak/
,但是然后它返回这个域下的所有配置。这是不好的,因为对外界来说它应该是localhost:8080
。在现在,如果你真的有域名(例如keycloop.awesome.app以及app.awesome.app)我认为它会很好地工作,因为它将使用外部DNS将其解析为IP地址,这是正确的机器。在
额外的好处是:PyOIDC可以从keydocaper中检索提供者配置,因此不再需要手动输入。耶!在
新设置 为了地方发展,我决定做一个小的设置如下:
(1)添加到/etc/hosts
:
127.0.0.1 keycloak.dev.local
127.0.0.1 app.dev.local
(2)在docker-compose.yml
中添加烧瓶服务:
extra_hosts: #host.docker.internal is not accepted.
- "keycloak.dev.local:<YOUR IP ADRESS>"
- "app.dev.local:<YOUR IP ADRESS>"
(=)现在,您和Flask应用程序都可以访问keycloak.dev.local
,并可以正确响应!在
请注意,我还是喜欢一个更好的解决方案。一旦我的ip地址改变,这个设置就失败了。在
flask oidc从客户端机密文件获取令牌端点配置。在
我做了以下更改,成功地做到了这一点:
示例:
现在它通过docker网络连接来交换令牌信息。在
相关问题 更多 >
编程相关推荐