ngx_http_auth_request_module
通过子请求自动实现客户端授权,如果子请求返回2xx状态码表示授权通过,如果返回401或403表示授权不通过, 其他状态码均被认为是错误。
当返回401时,客户端自定接收WWW-Authenticate
响应头。
结合核心模块中的satisfy
指令,可以组合多种授权认证方式,如ngx_http_access_module,ngx_http_auth_basic_module, ngx_http_auth_jwt_module。
提示
--with-http_auth_request_module
启用模块
指令
名称 | 参数类型 | 默认值 | 作用描述 | 上下文 |
---|---|---|---|---|
auth_request | uri /off | off | 子请求uri | http, server, location |
auth_request_set | $variable value | - | 当授权完成后,设置一些变量信息 | http, server, location |
示例
nginx
server {
listen 8081;
server_name localhost;
default_type text/html;
location / {
# 授权子请求
auth_request /auth;
root html;
index index.html index.htm;
}
# 这里授权子请求通过java实现的
location = /auth {
internal;
proxy_pass http://localhost:15432;
proxy_pass_request_body off;
proxy_set_header Content-Length "";
# 原始请求uri传递
proxy_set_header X-Original-URI $request_uri;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
java
@RestController
public class AuthController {
boolean enable = false;
@GetMapping("/auth")
public void auth(HttpServletRequest request, HttpServletResponse response) {
this.enable = !this.enable;
int code = this.enable ? HttpStatus.OK.value() : HttpStatus.UNAUTHORIZED.value();
// 打印原始请求uri
System.out.println(request.getHeader("X-Original-URI"));
// 每隔一次失败一次
response.setStatus(code);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
访问 http://localhost:8081/index.html 后效果如下: