1

为什么我的 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.confnginx-openid-connect

frontend.confopenid_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 文件?

4

1 回答 1

1

在您链接的存储库的“疑难解答”标题nginx-openid-connect下,“身份验证成功但浏览器显示太多重定向”下方的最后一个项目符号指示您确保nginx用户有权访问 JWK 文件。

不是指 Okta 用户或帐户;这是指nginx您的 Docker 映像中的用户。如果你:

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操作说明。

于 2022-01-05T00:55:36.280 回答