我有一个基本的Nginx Docker镜像,作为反向代理,目前在我的应用服务器前使用基本身份验证。我正在寻找一种将其与我们在开发中使用JWT的SSO解决方案集成的方法,但所有文档都说它需要Nginx+。那么,在开源Nginx内部执行JWT验证是否可能,还是我需要付费版本?
我有一个基本的Nginx Docker镜像,作为反向代理,目前在我的应用服务器前使用基本身份验证。我正在寻找一种将其与我们在开发中使用JWT的SSO解决方案集成的方法,但所有文档都说它需要Nginx+。那么,在开源Nginx内部执行JWT验证是否可能,还是我需要付费版本?
当然,有一些开源代码可以供您使用并针对您的情况进行自定义(例如)。
依我看,有更好的实现方式,您可以在应用程序前面使用“授权代理”。我最喜爱的是keycloak-gatekeeper(您可以与任何OpenID IdP一起使用,不仅适用于Keycloak),可以提供身份验证、授权、令牌加密、刷新令牌实现、小型占用空间等功能...
还有一个叫做lua-resty-openidc
的库:https://github.com/zmartzone/lua-resty-openidc
lua-resty-openidc
是适用于NGINX的库,实现了OpenID Connect Relying Party(RP)和/或OAuth 2.0 Resource Server(RS)功能。作为OpenID Connect Relying Party使用时,它使用OpenID Connect Discovery和基本客户端配置文件(即授权码流)对用户进行身份验证。作为OAuth 2.0 Resource Server使用时,它可以验证OAuth 2.0 Bearer Access Token是否有效,并根据预配置的密钥验证JSON Web Token的访问令牌。
FROM python:3.9-slim as base
FROM base as builder
ENV LANG en_GB.UTF-8 \
LANGUAGE en_GB.UTF-8 \
PYTHONUNBUFFERED=True \
PYTHONIOENCODING=UTF-8
RUN apt-get update \
&& apt-get install --no-install-recommends --no-install-suggests -y \
build-essential \
patch \
git \
wget \
libssl-dev \
libjwt-dev \
libjansson-dev \
libpcre3-dev \
zlib1g-dev \
&& wget https://nginx.org/download/nginx-1.18.0.tar.gz \
&& tar -zxvf nginx-1.18.0.tar.gz \
&& git clone https://github.com/TeslaGov/ngx-http-auth-jwt-module \
&& cd nginx-1.18.0 \
&& ./configure --add-module=../ngx-http-auth-jwt-module \
--with-http_ssl_module \
--with-http_v2_module \
--with-ld-opt="-L/usr/local/opt/openssl/lib" \
--with-cc-opt="-I/usr/local/opt/openssl/include" \
&& make
FROM base
COPY --from=builder /nginx-1.18.0/objs/nginx /usr/sbin/nginx
COPY --from=builder /nginx-1.18.0/conf /usr/local/nginx/conf
ENV LANG en_GB.UTF-8 \
LANGUAGE en_GB.UTF-8 \
PYTHONUNBUFFERED=True \
PYTHONIOENCODING=UTF-8
RUN apt-get update && \
apt-get install --no-install-recommends --no-install-suggests -y \
libssl-dev \
libjwt-dev \
libjansson-dev \
libpcre3-dev \
zlib1g-dev
假设您已经设置了没有身份验证的配置,我找到了这个并让它工作:https://hub.docker.com/r/tomsmithokta/nginx-oss-okta 它完全基于上面提到的lua-resty-openidc
。事实上,它已经构建好了,这对我很有帮助。
首先在Okta Web GUI中配置您的Okta应用程序,然后填写NGINX示例conf中未被注释的正确字段。唯一的注意事项是取消注释redirect_uri并填写它,但注释或删除已弃用的redirect_uri_path。配置中的所有其他内容都是您可以玩耍或接受的参数。
默认情况下,它会将您传递到标题页面,但如果您调整proxy_pass字段,应该能够将其传递给您的应用程序。