【问题标题】:How to handle https for a containerized OIDC server in local development?如何在本地开发中处理容器化 OIDC 服务器的 https?
【发布时间】:2021-08-29 04:14:49
【问题描述】:

我在 TLS 终止代理后面的容器中有一个 OpenID Connect 服务器 (OpenIDdict) 和一个 asp.net 核心 webapp。在生产中,webapp 和 OIDC 服务器之间的所有通信都可以通过“外部”,基于它们的公共名称。但是,在开发中,我使用的自签名证书不受运行应用程序的容器信任,仅受我的主机 PC 信任。因此,在开发中,webapp 可以很好地将浏览器重定向到 OIDC 服务器,但是当它需要调用令牌端点时,它将失败,因为证书不受信任。

一个可能的解决方案是让服务器到服务器的通信通过内部容器网络进行,但我无法让它工作。有没有办法让 asp.net 核心 OpenID Connect 中间件使用不同的 url(和协议)进行服务器到服务器的通信?

另一种解决方案是在容器中安装自签名证书,但因为这仅在开发中需要,因此给图像增加负担似乎是一种不好的做法。这个评价正确吗?

我希望我错过了最明显的解决方案。有什么想法吗?

【问题讨论】:

    标签: docker asp.net-core openid-connect asp.net-core-5.0 openiddict


    【解决方案1】:

    这就是我最终做的:

    1. 我在我的电脑的 hosts 文件中添加了一个自定义域,指向它自己。
    2. 使用 openssl,我创建了一个 rootDevCA.crt 并将其添加到我电脑上的受信任根目录和所有容器映像中。
    3. 使用该根证书,我为自定义域签署了新证书并将其(包括其密钥)提供给代理。

    只要我将根证书的密钥文件远离我的源代码,就应该没有安全问题。

    【讨论】:

    • 12factor.net/config TLS 配置只是配置,所以它应该在 env 变量中。对于本地开发人员,您将拥有带有自定义 CA 和证书的自己的配置。还应该有没有 TLS 的选项(例如,根本没有 TLS 配置环境变量),因为管理员可能决定在负载均衡器上使用 TLS 卸载(这是产品部署的常见用例)。
    猜你喜欢
    • 2017-08-09
    • 2021-12-21
    • 2017-02-22
    • 2019-04-05
    • 1970-01-01
    • 2020-11-08
    • 2018-07-02
    • 1970-01-01
    • 2016-01-14
    相关资源
    最近更新 更多