为什么我的 Nginx Plus 实例无法从 Okta 访问 JSON Web Key (JWK) 文件?
这个 Nginx Plus 的实例是用Dockerfile
类似于这个官方Dockerfile.alpine
直接来自 Nginx 的容器化的,有以下区别:
. . .
COPY ["cert.pem", "cert.key", "/"]
. . .
RUN . . .
. . .
nginx-plus-module-njs \
. . .
RUN ["rm", "/etc/nginx/conf.d/default.conf"]
. . .
COPY ["frontend.conf", "openid_connect.js", "openid_connect.server_conf", "openid_connect_configuration.conf", "/etc/nginx/conf.d/"]
. . .
CMD ["nginx", "-g", "daemon off; load_module modules/ngx_http_js_module.so;"]
frontend.conf
, openid_connect.js
,都是从这里复制openid_connect.server_conf
过来的。openid_connect_configuration.conf
nginx-openid-connect
frontend.conf
,openid_connect.server_conf
并且在安装过程的这一部分之后openid_connect_configuration.conf
都已正确配置。
Nginx Plus 在 Okta 管理控制台中被正确配置为 OIDC 应用程序。
当我在新的浏览器会话中输入指向容器化 Nginx Plus 实例的静态外部 IP 地址时,我被重定向到https://$OKTA_DOMAIN_NAME.okta.com
并提示登录。输入正确的凭据后,我可以在 Nginx Plus 日志中看到以下内容:
. . .
1970/01/01 00:00:01 [alert] 1#1: open() "/etc/nginx/conf.d/oidc_id_tokens.json.tmp" failed (13: Permission denied)
. . .
将oidc_id_tokens.json.tmp
以下COPY
指令添加到Dockerfile
:
COPY --chown=nginx:nginx ["empty.file", "/etc/nginx/conf.d/oidc_id_tokens.json.tmp"]
重新部署和另一个登录流程后产生了另一个类似的错误:
. . .
1970/01/01 00:00:01 [crit] 1#1: rename() "/etc/nginx/conf.d/oidc_id_tokens.json.tmp" to "/etc/nginx/conf.d/oidc_id_tokens.json" failed (13: Permission denied)
. . .
我将如何允许 Nginx Plus 访问 JWK 文件?