使用auth_request做权限控制

网上很多如标题的文章,为何我还要写呢???

网上一搜一大堆对我来说完全没用的文章,或者直接nginx官网复制过来,看得我贼无语。我的需求是校验参数是拼接到链接后面,而不是请求头的,网上大部分都是通过请求头来获取校验参数。

开启auth_request

下载nginx.tar.gz包,编译时把auth_request加入到nginx中,不用下载其它(1.5.4以上,默认包含auth_request,需要编译的时候开启),Windows版本可以直接用。

编译代码如下:

# 进入到解压文件内
./configure --prefix=你需要安装的目录 --with-http_auth_request_module && make && make install

配置校验参数

location ~^/api/image/(.*)$ {
	# 转发URL地址
	# minio服务器
	auth_request /auth;
    # 校验地址,并附上校验参数
	set $auth_request_uri "http://192.168.40.14:8080/image/auth?$query_string";
	error_page 401 403 500 = /authError.png;
	
	auth_request_set $user $upstream_http_x_forwarded_user;
	proxy_set_header X-Forwarded-User $user;
	
	proxy_pass http://minio地址:9000/$1;
	autoindex 	on;
}

location /auth {
    # 内部调用
	internal;
	
	proxy_set_header Host $host;
	proxy_pass_request_body off;
	proxy_set_header Content-Length "";
	proxy_pass $auth_request_uri;
}

location /authError.png {
	root   html;
}

 灵魂代码!灵魂代码!灵魂代码!

set $auth_request_uri "http://192.168.40.14:8080/image/auth?$query_string";

我的项目需求是对图片做权限校验,图片展示是直接在img标签里面展示的,因此,没法做请求头的设置,需要在链接后面携带校验信息。如:http://127.0.0.1/api/image/123.jpg?token=xxx

这时候校验信息,而网上大部分是没有这段代码的`set $auth_request_uri "http://192.168.40.14:8080/image/auth?$query_string";` 导致参数无法传递到校验地址(如果是设置请求头里的,可以获取到)。

校验成功就将127.0.0.1/api/image/123.jpg?token=xxx转发到 minio地址:9000/123.jpg

校验失败后台设置响应状态401或403,将转发到authError.png这张图片上。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值