容器化 Nginx Plus 无法打开或重命名 Okta JWK 文件
Containerized Nginx Plus is Unable to Open or Rename Okta JWK File
为什么我的 Nginx Plus 实例无法从 Okta 访问 JSON Web 密钥 (JWK) 文件?
这个 Nginx Plus 实例是用 Dockerfile
容器化的,类似于直接来自 Nginx 的 this 官方 Dockerfile.alpine
,但有以下区别:
. . .
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
复制过来的,找到 here.
frontend.conf
、openid_connect.server_conf
和 openid_connect_configuration.conf
都已正确配置,遵循安装过程的 this 部分。
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)
. . .
使用以下 COPY
指令将 oidc_id_tokens.json.tmp
添加到 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 文件?
在您链接的 nginx-openid-connect
存储库的“疑难解答”header 下,“身份验证成功但浏览器显示太多重定向”下方的最后一个项目符号指示您确保 nginx
用户有权访问 JWK 文件。
这 不是 指的是 Okta 用户或帐户;这是指您的 Docker 图片中的 nginx
用户。如果你:
docker run \
--entrypoint="" \
--interactive \
--tty \
$NGINX_PLUS_IMAGE_ID \
cat /etc/nginx/nginx.conf
#=>
user nginx;
. . .
你可以看到基本的 Nginx 配置。文件使用 nginx
用户而不是 root
.
我们应该 授予 nginx
访问 /etc/nginx
目录中所有文件的权限,其中:
RUN ["chown", "-R", "nginx:nginx", "/etc/nginx"]
Dockerfile
指令。
为什么我的 Nginx Plus 实例无法从 Okta 访问 JSON Web 密钥 (JWK) 文件?
这个 Nginx Plus 实例是用 Dockerfile
容器化的,类似于直接来自 Nginx 的 this 官方 Dockerfile.alpine
,但有以下区别:
. . .
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
复制过来的,找到 here.
frontend.conf
、openid_connect.server_conf
和 openid_connect_configuration.conf
都已正确配置,遵循安装过程的 this 部分。
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)
. . .
使用以下 COPY
指令将 oidc_id_tokens.json.tmp
添加到 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 文件?
在您链接的 nginx-openid-connect
存储库的“疑难解答”header 下,“身份验证成功但浏览器显示太多重定向”下方的最后一个项目符号指示您确保 nginx
用户有权访问 JWK 文件。
这 不是 指的是 Okta 用户或帐户;这是指您的 Docker 图片中的 nginx
用户。如果你:
docker run \
--entrypoint="" \
--interactive \
--tty \
$NGINX_PLUS_IMAGE_ID \
cat /etc/nginx/nginx.conf
#=>
user nginx;
. . .
你可以看到基本的 Nginx 配置。文件使用 nginx
用户而不是 root
.
我们应该 授予 nginx
访问 /etc/nginx
目录中所有文件的权限,其中:
RUN ["chown", "-R", "nginx:nginx", "/etc/nginx"]
Dockerfile
指令。