-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathnginx_token_validation_rules.conf
131 lines (96 loc) · 3.36 KB
/
nginx_token_validation_rules.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#user nobody;
worker_processes 1;
error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
# Lua packages installed at nginx directory inside openrestly
lua_package_path "$prefix/resty_modules/lualib/?.lua;;";
lua_package_cpath "$prefix/resty_modules/lualib/?.so;;";
resolver 8.8.8.8;
lua_ssl_trusted_certificate /etc/ssl/certs/ca-certificates.crt;
lua_ssl_verify_depth 5;
# cache for JWT verification results
lua_shared_dict introspection 10m;
server {
listen 8080;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
location /api {
access_by_lua '
local opts = {
-- signature for kid
secret = [[-----BEGIN CERTIFICATE-----
-----END CERTIFICATE-----]],
-- For validating bearer access token against pingfed server
-- introspection_endpoint="",
-- client_id="test123",
-- ssl_verify = "no",
}
-- call bearer_jwt_verify for OAuth 2.0 JWT validation
local res, err = require("resty.openidc").bearer_jwt_verify(opts)
-- call introspect for OAuth 2.0 Bearer Access Token validation
-- local res, err = require("resty.openidc").introspect(opts)
if err or not res then
ngx.status = 403
ngx.say(err and err or "no access_token provided")
ngx.exit(ngx.HTTP_FORBIDDEN)
end
-- at this point res is a Lua table that represents the JSON
-- payload in the JWT token
-- need a logic to loop over scope if it is an array value
if res.scope[1] ~= "<scope name>" then
ngx.log(ngx.ERR, "required scope not found")
ngx.log(ngx.ERR, tostring(res.scope[1]))
ngx.exit(ngx.HTTP_FORBIDDEN)
end
if res.client_id ~= "<client id>" then
ngx.log(ngx.ERR, "required scope not found")
ngx.exit(ngx.HTTP_FORBIDDEN)
end
';
rewrite /api$ / break;
proxy_pass <IP address>;
}
error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
}