Skip to content

Commit 9e6ba0c

Browse files
committed
Allow aud claim as array
1 parent e3baa25 commit 9e6ba0c

File tree

2 files changed

+6
-3
lines changed

2 files changed

+6
-3
lines changed

frontend.conf

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ log_format main_jwt '$remote_addr - $jwt_claim_sub [$time_local] "$request" $sta
1111
# JavaScript code for OpenID Connect
1212
js_include conf.d/openid_connect.js;
1313
js_set $requestid_hash hashRequestId;
14+
auth_jwt_claim_set $jwt_audience aud; # In case aud is an array
1415

1516
keyval_zone zone=opaque_sessions:1M state=conf.d/opaque_sessions.json timeout=1h; # CHANGE timeout to JWT/exp validity period
1617
keyval_zone zone=refresh_tokens:1M state=conf.d/refresh_tokens.json timeout=8h; # CHANGE timeout to refresh validity period

openid_connect.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -164,13 +164,14 @@ function hashRequestId(r) {
164164

165165
function validateIdToken(r) {
166166
// Check mandatory claims
167-
var required_claims = ["aud", "iat", "iss", "sub"];
167+
var required_claims = ["iat", "iss", "sub"]; // aud is checked separately
168168
var missing_claims = [];
169169
for (var i in required_claims) {
170170
if (r.variables["jwt_claim_" + required_claims[i]].length == 0 ) {
171171
missing_claims.push(required_claims[i]);
172172
}
173173
}
174+
if (r.variables.jwt_audience.length == 0) missing_claims.push("aud");
174175
if (missing_claims.length) {
175176
r.error("OIDC ID Token validation error: missing claim(s) " + missing_claims.join(" "));
176177
r.return(403);
@@ -186,8 +187,9 @@ function validateIdToken(r) {
186187
}
187188

188189
// Audience matching
189-
if (r.variables.jwt_claim_aud != r.variables.oidc_client) {
190-
r.error("OIDC ID Token validation error: aud claim (" + r.variables.jwt_claim_aud + ") does not match configured $oidc_client (" + r.variables.oidc_client + ")");
190+
var aud = r.variables.jwt_audience.split(",");
191+
if (!aud.includes(r.variables.oidc_client)) {
192+
r.error("OIDC ID Token validation error: aud claim (" + r.variables.jwt_audience + ") does not include configured $oidc_client (" + r.variables.oidc_client + ")");
191193
valid_token = false;
192194
}
193195

0 commit comments

Comments
 (0)