如何使用Cookie或Header验证请求?

Nginx

1 前言

一个问题,一篇文章,一出故事。
笔者有一个使用请求模块进行身份认证的反向代理服务器,详细配置如下,

如何部署Nginx认证请求模块?


现在需要改为使用Cookie或Header进行身份验证。
客户端如果想通过反向代理获取上游资源时,需要向反向代理上发布的URL发送一个Cookie或Header且后端服务器需要验证通过后才取得反向代理后端的资源访问权限。

2 最佳实践

2.1 创建服务端配置

2.1.1 设置缓存目录

vim /etc/nginx/public/proxy_cache_path.conf

加入如下配置,

proxy_cache_path /data/nginx/cache/apiAuth levels=2:2:2 keys_zone=apiAuth:10m
                 inactive=24h  max_size=1g;
proxy_cache_path /data/nginx/cache/apiAuths levels=2:2:2  keys_zone=apiAuths:10m
                 inactive=24h  max_size=1g;

然后,你需要修改如下文件加载该配置,

vim /etc/nginx/nginx.conf

加入如下指令用于加载,

http {
    #...
    include /etc/nginx/public/proxy_cache_path.conf;
    #...
}

然后,你需要通过如下指令重载使服务生效,

systemctl reload nginx

2.1.2 设置统一的认证配置

vim /etc/nginx/public/proxy_api_auth.conf

加入如下配置,

set $auth 0;
if ($COOKIE_token){set $auth 1;}

set $auths 0;
if ($http_token){set $auths 1;}

location = /apiAuthCookie {
        if ($auth = 0){return 403;}
        proxy_pass https://api.cmdschool.org:8092/security/appAuthorization;
        proxy_pass_request_body off;
        proxy_set_header Content-Length "";
        proxy_set_header X-Original-URI $request_uri;
        proxy_cache            apiAuth;
        proxy_cache_valid      200  12h;
        proxy_cache_valid      403  3s;
        proxy_cache_key        $COOKIE_comchattoken;
}

location = /apiAuthHeader {
        if ($auths = 0){return 403;}
        proxy_pass https://api.cmdschool.org:8092/security/appAuthorization;
        proxy_pass_request_body off;
        proxy_set_header Content-Length "";
        proxy_set_header X-Original-URI $request_uri;
        proxy_cache            apiAuths;
        proxy_cache_valid      200  12h;
        proxy_cache_valid      403  3s;
        proxy_cache_key        $http_token;
}

需要注意的是,
– 密码转发到后端“https://api.cmdschool.org:8092/security/appAuthorization”验证
– 后端“https://api.cmdschool.org:8092/security/appAuthorization”的验证逻辑需要由开发实现
然后,你需要通过如下指令重载使服务生效,

systemctl reload nginx

2.1.3 加载认证配置

vim /etc/nginx/conf.d/www.cmdschool.org.conf

加入如下配置,

server {
    #...
    include /etc/nginx/public/proxy_api_auth.conf;
    location /app1 {
        auth_request /apiAuthCookie;
        #...
    }
    location /app2 {
        auth_request /apiAuthHeader;
        #...
    }
}

然后,你需要通过如下指令重载使服务生效,

systemctl reload nginx

2.2 客户端验证

使用COOKIE的验证方法(推荐),

如何在浏览器附加Cookie?


使用请求头的验证方法,

如何在浏览器附加请求头Header?

没有评论

发表回复

Nginx
如何解决https请求不安全http页被阻止问题?

1 前言 一个问题,一篇文章,一出故事。 笔者最近代理公司应用,发现https的页面有请求不安全的h …

Nginx
如何Nginx代理上游的子项目或文件夹?

1 前言 一个问题,一篇文章,一出故事。 笔者接到任务需要把Tomcat的其中一个应用号使用Ngin …

Nginx
如何安装部署RHEL 9 Nignx?

1 前言 一个问题,一篇文章,一出故事。 笔者需要基于RHEL 9部署Nginx环境,于是整理此文。 …