Repository navigation
Expand file tree
/
Copy pathChangeLog
More file actions
613 lines (515 loc) · 25.6 KB
/
Copy pathChangeLog
File metadata and controls
613 lines (515 loc) · 25.6 KB
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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
09/11/2026
- doc: document every remaining public API member: briefs for the constants,
opaque types and struct fields that still lacked one, @fn blocks for the
functions and accessors the declaration macros generate (saying which of
them are not implemented), and a single entry for the session configuration
type that both openidc.h and session.h declare; the README no longer calls
the API reference a work in progress; closes #11
09/10/2026
- update copyright year to 2026
- session: make the inactivity timeout slide, i.e. move the expiry forward
when a request refreshes the session (the assignment had been commented
out since the original implementation, so a session ended at first-save
time plus the timeout regardless of activity); start a new session, as for
an expired one, when the stored one exceeded the maximum duration instead
of failing the request; release claims and cookie settings that are
replaced; register a configuration only once when it is configured again;
guard NULL in oauth2_session_rec_free and oauth2_cfg_session_cache_get; add
a "session" test suite covering this
- oauth2: release the token payload when the DPoP or mTLS proof-of-possession
check fails after a verifier accepted the token, instead of returning false
with it still allocated; check the introspection context before using it
- dpop: compare the "htu" claim to the request URL the way RFC 9449 section
4.3 asks: scheme and host case-insensitively, the path as-is (it was
compared case-insensitively as a whole); log the computed thumbprint on a
"jkt" mismatch, which printed "(null)"
- cache: do not register a cache whose backend failed to initialize, which
leaked it and shadowed the name; declare oauth2_cache_child_init in cache.h
(it was only declared by the test suite); make the memcache backend delete
the entry on a NULL value like the other backends do and hand the core a
value allocated through the oauth2 allocator rather than libmemcached's
- doc: document the individual members of oauth2.h, session.h and cache.h,
the last headers still covered at section level only; see #11
- openidc: default the client's scope to "openid", its HTTP timeout to 20
seconds and TLS verification to on when unset, instead of sending no scope
and passing the unset sentinel to libcurl as "no timeout"; release a
provider resolver that is replaced
- http: release basic auth credentials that are set again, accept port 0
as "no port" in oauth2_http_request_port_set, make
oauth2_http_request_is_secure return false for a NULL request, format the
Content-Length header with %zu, and do not retry a call whose response
exceeded the 1 MB buffer
- cfg: release the previous value when a string option or an endpoint's
auth is configured again, return an allocated error string from
oauth2_cfg_set_cache on a parse failure like its other error paths, and
list only the allowed locations in the error of an invalid token location
- jose/util: release the output of json_dumps through the oauth2 allocator,
which is where jansson allocates once oauth2_mem_set_alloc_funcs redirected
cjose, instead of with free()
- log: fix oauth2_log_sink_add not advancing the tail of the sink list, so
that adding a third sink dropped the second one from message delivery
- ipc: make oauth2_ipc_sema_wait and oauth2_ipc_sema_trywait, and thereby
oauth2_ipc_mutex_lock, return false when the semaphore was never created or
the wait failed instead of reporting success
- jose: check the JWE rather than the JWS after cjose_jwe_encrypt in
oauth2_jose_encrypt, so that an encryption failure is reported instead of
exporting a NULL JWE; reject NULL arguments in oauth2_jose_hash2s
- proto: do not dereference a missing Content-Type header when looking for
the source token in a form POST
- nginx: fix OAUTH2_NGINX_CFG_FUNC_ARGS4 copying the fourth directive
argument from the third one's data
- apache: pass the log callback rather than the server_rec as the callback
when merging server configurations in oauth2_apache_cfg_srv_merge
- jq: release the intermediate results of a filter producing more than one
output instead of leaking all but the last one
- util: do not dereference a NULL number pointer in oauth2_json_number_get
- doc: document the individual members of cfg.h, http.h and openidc.h - the
options with their defaults, ownership and NULL semantics - which the first
Doxygen round had covered at section level only; see #11
- doc: add Doxygen documentation to the remaining public headers: proto.h,
jose.h, util.h, log.h, mem.h, ipc.h, jq.h and version.h, and the Apache and
NGINX binding headers apache.h and nginx.h, so that every public header is
now covered by the API reference generated by "make doxygen"; see #11
- portability: make the library and its test suite compile with MSVC on Windows
behind _WIN32/_MSC_VER guards, inert everywhere else: the semaphore, mutex
and shared-memory layer in ipc.c gets a Win32 implementation (unnamed kernel
semaphores, critical sections, process-heap memory; nothing forks there),
the file cache lists its directory through FindFirstFile and defaults to
%TEMP%, the shm cache alignment attribute, strtok_r/getpid/access/usleep
and the 64-bit oauth2_time_t format get their MSVC spellings, the CA-bundle
lookup in http.c uses the ANSI API, and the loopback HTTP fixture the tests
drive runs on Winsock and a CRT thread; the data symbols the public headers
export (log sinks, Apache callback table and log level maps) carry an
OAUTH2_EXTERN/OAUTH2_APACHE_EXTERN storage class so they resolve across a DLL
boundary, and the unused <semaphore.h> include is dropped from ipc.h
- apache: drop the duplicate declaration of the ssl_var_lookup optional
function type, mod_ssl.h provides it (MSVC rejects the redefinition)
- dpop: fix a stray backslash in the thumbprint mismatch log message
- release 2.4.0
08/12/2026
- oauth2: apply the DPoP/mTLS proof-of-possession settings of the verifier that
actually verified the token in oauth2_token_verify, instead of those of the
first verifier in the chain; when a "type=dpop" or "type=mtls" verifier was
configured after another one, the proof-of-possession check ran against the
first verifier's unset settings, which for DPoP skips the proof "iat"
freshness and "jti" replay checks and for mTLS ignores a configured
"mtls.policy=required"; single-verifier setups were not affected
- doc: start documenting the public API with Doxygen, covering oauth2.h,
openidc.h, cfg.h, http.h, cache.h and session.h; add a Doxyfile and a
"make doxygen" target that generate the API reference into doc/html;
see #11
- doc: add a Documentation section to the README describing the Doxygen
API reference and the API stability status, point community support at
the Discussions tracker, and refresh the wiki FAQ with the project
status and links to the documentation; see #11
- build: add a Docs workflow that publishes the generated API reference
to GitHub Pages on pushes to master; see #11
- session: remove the declaration of oauth2_cfg_session_release from
session.h; the function was never implemented so no caller can have
linked against it
08/01/2026
- cfg: encode claim values passed on to the target application in headers and
environment variables, using a new "encoding" option on the target pass
configuration, e.g.:
OAuth2TargetPass encoding=latin1
a claim value is UTF-8, but an HTTP header field value is US-ASCII (RFC 9110
section 5.5) with ISO-8859-1 as its historical fallback, so a claim such as
"Cem Özdemir" produced a header that strict clients reject. "latin1" (the new
default) converts to ISO-8859-1 and represents anything that does not fit as
"?", "base64url" applies base64url encoding, and "none" restores the previous
behaviour of copying the value verbatim. Follows the approach taken for
mod_auth_openidc's OIDCPassClaimsAs
thanks @maltesmann; closes OpenIDC/mod_oauth2#77
- build: bump the libtool version-info to 2:0:1 for the interfaces added above;
the soname stays liboauth2.so.1 since nothing was removed or changed
- oauth2: always return an HTTP error status code from oauth2_token_verify when
a token is rejected; the local (JWT) verification callback never set the
"status_code" out-parameter, so it kept the value the caller initialized it
with - 0 in the case of mod_oauth2, which relays it as an Apache return code
and thus signals OK without a user, upon which Apache logs "AH00027: No
authentication done but request not allowed without authentication" and
returns a 500 instead of a 401; this affected any locally detected failure,
i.e. expiry, signature mismatch, "iss"/"aud"/"nbf" validation. An
introspection endpoint returning "active": false similarly left the 200 of
that successful call behind. Both now yield 401; an error status code
returned by a remote endpoint is still passed on as-is
thanks @smanolache; closes OpenIDC/mod_oauth2#94
06/04/2026
- oauth2: require an "iss" claim in JWTs verified against the issuer discovered
from the AS metadata document (the "metadata" verification type); it bound
the token to that issuer but left "verify.iss" at its "optional" default,
which tolerates a token carrying no "iss" claim at all; an explicit
"verify.iss" still wins
- jose: allow the expected "iss" and "aud" values to be configured for token
verification, using the claim names themselves as options, e.g.:
OAuth2TokenVerify jwks_uri <url> aud=https://my-api&iss=https://my-as
the "verify.iss"/"verify.aud" options only expressed *how* strictly a claim
was validated; the expected values themselves could not be configured outside
of an OIDC id_token, so for the other verification types there was nothing to
match either claim against.
Configuring a value defaults the matching "verify.<claim>" option to
"required", so that "aud=" alone suffices; an explicit "verify.aud"/
"verify.iss" still wins. With no value configured nothing changes. An
explicitly configured "iss=" now also takes precedence over the issuer
discovered from AS metadata, which additionally fixes leaking it there
- cache: honour the configured shm "max_key_size" when checking the key
length; it was first rounded up to a multiple of 64 (minimum 64), so a
smaller configured limit was never enforced - the rounded size now only
dimensions the storage slot
- test: replace the suite-wide forked HTTP server (fixed port 8888 with
path-routed callbacks serving fixtures) with a per-test loopback fixture
(test/http_server.c) that scripts the response sequence for each outbound
request and captures the requests for assertions, on a kernel-assigned or
caller-chosen port via POSIX sockets and a pthread (no APR dependency)
- test: add unit tests raising line coverage of cfg.c, proto_cfg.c, dpop.c,
ipc.c and the cache backends, exercising option parsing, config clone/merge,
the IPC semaphore/mutex/shm NULL-guard and try-wait paths, the DPoP proof
validation branches and the cache encryption/eviction/child-init paths
- test: split the cache suite into per-backend suites (cache, cache_file,
cache_memcache, cache_redis) and add a "make check-parallel" target that runs
the suites concurrently (one process per suite); this overlaps the backends'
real-time TTL-expiry waits. also trim the per-site expiry waits (ttl/timeout
2 + sleep 3 -> 1 + sleep 2, keeping a 1s margin against the 1s clock
granularity), taking the suite from ~29s to ~21s serial and ~5s in parallel
- bump to 2.3.1dev
06/03/2026
- oauth2: re-validate the token "exp" on a verification-cache hit; the result
cache TTL is independent of the token's own expiry, so a cached entry could
previously be returned as valid after the token had already expired. On a hit
with a passed "exp" the entry is dropped and the token re-verified under the
configured policy (CWE-613)
- openidc: store the authentication-request nonce in the (encrypted) state and
validate that the returned id_token's "nonce" claim matches it, per OpenID
Connect Core 1.0 section 3.1.3.7 step 11; previously the nonce was sent but
never checked, allowing id_token replay (CWE-294)
- openidc: bind a received id_token to the provider and the client by requiring
its "iss" to equal the provider issuer and its "aud" to contain the configured
client_id, per OpenID Connect Core 1.0 section 3.1.3.7; previously neither was
checked, so an id_token minted for another client (or by another provider
whose key happened to verify) was accepted (CWE-287)
- jose: add audience ("aud") validation (oauth2_jose_jwt_validate_aud), wired
into JWT payload validation and enforced whenever an expected audience is set
on the verify context; accepts both a single-string and an array "aud" claim
per RFC 7519 section 4.1.3 (CWE-287)
- test: use >= 256-bit symmetric keys in the HS256 sign/verify test vectors, as
enforced by cjose 0.6.2.6 (RFC 7518 section 3.2); recompute the affected HMAC
signatures and skip "exp" validation for the exp-less example tokens
- jose: require the "exp" claim by default when verifying JWTs via a shared key
or a JWKS URI, so a correctly signed token without "exp" is no longer accepted
as non-expiring; set verify.exp=optional to restore the previous behaviour.
EC-key and AWS ALB token types keep "exp" optional because they carry it in
the JOSE header. Also add "nbf" (not-before) validation, configurable through
verify.nbf (CWE-613)
- nginx: clamp the snprintf() return value before using it as the length of a
fixed stack buffer when formatting configuration error messages; a long
invalid variable name or expression could otherwise drive a memcpy()
past the end of the 128-byte buffer (CWE-125)
- http: fix NULL-pointer dereference in the sanitized header set/add helper; the
guard used && instead of || so a NULL request dereferenced request->header
(CWE-476)
- ipc: fix NULL-pointer dereference in oauth2_ipc_mutex_free(); the guard used
&& instead of || so passing a NULL mutex dereferenced it (CWE-476)
- cfg: honour "envvars" target-pass setting; the getter tested the unrelated
as_headers field, so an explicit envvars=off was ignored and claims plus the
access_token were still exported into the subprocess environment (CWE-200)
- http: fix an invalid free / heap corruption when parsing X-Forwarded-Proto,
X-Forwarded-Port or X-Forwarded-Host header values that start with a
separator; the left-most-value helper returned an interior strtok() pointer
that callers subsequently freed (CWE-763); also fixes a leak of the
duplicated header value
- cache: fix a NULL-pointer dereference when a non-default cache
passphrase_hash_algo is configured; a self-assignment left the local
variable NULL so strcmp(NULL, "none") crashed every encrypted cache get/set
- cache: pass cache keys/values to Redis via redisCommandArgv() instead of
building a command string that was passed as the redisCommand() printf-style
format argument; prevents format-string exploitation and Redis
command/argument injection through cache keys and values (CWE-134, CWE-74)
- jose: fix a memory leak of the decoded EVP_PKEY in the single-EC-key URL
resolver (e.g. AWS ALB) on OpenSSL 3.x; found via Valgrind
- cache: zero-initialize the file-cache info header before writing it so the
struct's alignment padding is no longer flushed to disk as uninitialised
stack memory (reported by Valgrind as a write of uninitialised byte(s))
- release 2.3.0
06/02/2026
- jose: URL-encode the JWT "kid" before constructing the AWS ALB JWKs URL to
prevent path traversal/injection (SSRF) into the outbound key request (CWE-918)
thanks Michał Majchrowicz and Marcin Wyczechowski, members of the AFINE Team
- jose: fix memory leak of the region string extracted from the ARN in the
AWS ALB JWKs resolver
- dpop: reject a DPoP proof whose jwk header contains private key material
per RFC 9449 section 4.3 step 7 (CWE-345)
thanks Michał Majchrowicz and Marcin Wyczechowski, members of the AFINE Team
- bump to 2.2.2dev
04/18/2026
- build: guard --coverage linker flag behind CODE_COVERAGE_ENABLED; thanks @kraj
04/02/2026
- release 2.2.1
03/25/2026
- proto: use strncasecmp on content type when obtaining a token from POST; closes #72; thanks @roubert
- code: correct strstr assignments to compile with glibc 2.43; closes #73; thanks @Saur2000
- link: add support for libtool version-info and bump to 1.0.0; closes #68; thanks @ararslan and @babelouest
02/03/2026
- code: assign strstr to char instead of const char to compile with globc 2.43
see #70; thanks @babelouest
01/27/2026
- api: fix/complete returning HTTP status code from oauth2_token_verify (added in 2.2.0)
01/14/2026
- support adding custom parameters to the authentication request by adding the
`authn_request_params` option for the OpenID Connect Client
- bump to 2.2.1dev
01/06/2026
- release 2.2.0
12/21/2025
- http: add support for HTTP retries (default 1) and HTTP retry interval (300 ms default)
- api: return HTTP status code from oauth2_token_verify
08/28/2025
- add oauth2_ipc_thread_mutex_t and use it for Redis, cURL and global lists
to improve performance across multiple processes running on the same host
- bump to 2.2.0dev
08/08/2025
- release 2.1.1
07/31/2025
- fix URL decoding of HTTP request query parameters; see OpenIDC/ngx_openidc_module#24; thanks @drzraf
03/13/2025
- test: add a space after the status code in the HTTP responses; see curl/curl#16692 ; thanks @charles2910 and @bagder
- bump to 2.1.1dev
02/12/2025
- add updated AWS ALB JWKs retrieval supporting new "signer"/"region" logic and key rotation
closes: https://github.com/OpenIDC/mod_oauth2/issues/73
- release 2.1.0
01/02/2024
- update copyright year to 2025
09/13/2024
- add support for introspection.token_param_name; closes #57
09/11/2024
- add (optional) JQ support with caching in oauth2_jq_filter
- add "json_payload_claim" claim option to oauth2_cfg_target_pass_t
- make oauth2_jwt_create public in jose.h and add a json_payload parameter
- nginx: fix memory leak in _oauth2_nginx_ssl_cert_set
- bump to 2.1.0dev
08/22/2024
- change LICENSE to Apache 2.0
- release 2.0.0
08/02/2024
- correct error log upon mismatch in "iss" claim: id_token->JWT
06/24/2024
- allow to use local file through file:// protocol for metadata or jwks; see #51; thanks @pladen
- bump to 1.6.4dev
06/24/2024
- release 1.6.3
06/20/2024
- nginx: add nginx_oauth2_set_require to be used with OAuth2Require etc.
see OpenIDC/ngx_oauth2_module#7; thanks @smanolache and @pladen
06/19/2024
- add NGINX macros/functions for setting claim variables in the request context
see OpenIDC/ngx_oauth2_module#7; thanks @smanolache and @pladen
- allow NGINX primitives in an if block within a location block in the http block
- bump to 1.6.3dev
06/05/2024
- release 1.6.2
05/31/2024
- refactor NGINX port extraction so it works with NGINX >= 1.27.0; closes #49; thanks @anpin
- add PCRE2_CFLAGS to cache/server object linking
03/11/2024
- release 1.6.1
03/08/2024
- add support for RFC 8705 OAuth 2.0 Mutual-TLS Certificate-Bound Access Tokens to the NGINX binding
03/04/2024
- add support for Redis 6 ACL username based authentication; see: OpenIDC/mod_oauth2#63
- bump to 1.6.1dev
12/06/2023
- add support for the OAuth 2.0 Client Credentials grant type
- use libcurl version macro that works on older platforms
- release 1.6.0
11/08/2023
- update DPoP support to RFC 9449
- release 1.5.2
08/31/2023
- printout more cjose error details when errors occur verifying JWT access tokens
06/29/2023
- fix timing issue in check_openidc.c; closes #47
- bump to 1.5.2dev
04/19/2023
- add issuer validation for JWT access tokens when configured through OAuth2Verify metadata; closes #44; thanks @chris-crunchr
- release 1.5.1
04/14/2023
- add support for resolving provider metadata from a Discovery endpoint URL; see https://github.com/OpenIDC/ngx_openidc_module/issues/18
- bump to 1.5.1dev
03/22/2023
- add error logs about missing or invalid "active" boolean claim in introspection response
03/08/2023
- move repo to OpenIDC github organization
03/07/2023
- release 1.5.0
03/03/2023
- add support for regular expressions in Require statements; see https://github.com/zmartzone/mod_oauth2/discussions/39
- depend on libpcre2
- fix memory leak in _oauth2_jose_options_jwk_set_rsa_key when using OpenSSL 3.x
- bump to 1.5.0dev
03/01/2023
- add support for introspect.params; see https://github.com/zmartzone/mod_oauth2/discussions/44
- release 1.4.5.5
01/22/2023
- hack for el7/x86 where openssl 1.0.2 and openssl 1.1.1 are installed for respectively Apache and NGINX 1.20.1
- bump to 1.4.5.5rc0
01/21/2023
- revert header_add/header_set change
- release 1.4.5.4
01/20/2023
- don't add WWW-Authenticate header(s) but (over)write a single one; see zmartzone/mod_oauth2#42
- release 1.4.5.3
12/14/2022
- fix NGINX https schema detection
- bump to 1.4.5.3dev
12/06/2022
- change Apache module init info log
- release 1.4.5.2
11/30/2022
- initialize check_oauth2 properly; call OPENSSL_init_crypto for OpenSSL >= 1.1.0
11/23/2022
- add JANSSON_LIBS to apache/nginx LIBADD; closes #40; thanks @pskopnik
- bump to 1.4.5.2dev
08/22/2022
- fix concurrency issue when using OAuth2Verify metadata; see #37; thanks @rtitle
- fix memory leak in cURL writeback function
- release 1.4.5.1
07/28/2022
- fix memory leak when using OAuth2Verify metadata
07/27/2022
- use main request for Apache request contexts
- set refresh to true when getting jwsk_uri results from cache
- print warning when cjose_jws_verify fails
- avoid using cjose_jwk_retain because it is not thread safe
- release 1.4.5
06/24/2022
- add cjose, curl and ssl to liboauth2.pc.in
- add add curl and cjose flags to liboauth2_cache_la_CFLAGS
04/16/2022
- fix file cache so we do not try to remove a file that was cleaned just before; see #33
- fix tests for client_secret_jwt and private_key_jwt so encoded JWT comparison works for cjose >= 0.6.2
- release 1.4.4.2
03/06/2022
- add support for OpenSSL 3.0; closes #31
- bump to 1.5.0dev
03/03/2022
- fix race condition and potential crash in curl usage in oauth2_url_decode
see zmartzone/mod_oauth2#27; thanks @rtitle
- release 1.4.4.1
12/23/2021
- allow deprecated declarations to build with OpenSSL 3.0; see #31
- release 1.4.4
12/22/2021
- hash the cache encryption key to a string instead of bytes
- Makefile.am improvements:
- move OpenSSL libs go generic libraries so cache files compile with the right flags
- use ${srcdir} to conform to distcheck
- add Github Actions CI; remove Travis
10/12/2021
- make outgoing_proxy an endpoint property
- accommodate for NULL key in oauth2_cache_get and oauth2_cache_set
- release 1.4.3.2
10/11/2021
- add outgoing_proxy option to verify context
- correct remote_user debug printout
- release 1.4.3.1
06/21/2021
- printout remote username claim when not found, for debugging purposes
06/10/2021
- use encrypted JWTs for storing encrypted cache contents and avoid using static AAD/IV
closes #26; thanks @niebardzo
- avoid memory leaks on JWT validation errors
- release 1.4.3
06/07/2021
- correct iat slack validation defaults, see https://github.com/zmartzone/mod_oauth2/discussions/20
thanks @DrakezulsMinimalism
- release 1.4.2.1
05/28/2021
- add Travis and LGTM
05/25/2021
- set memory alignment of shm cache structs to 64 bytes; see #21 and #24
- release 1.4.2
04/19/2021
- apache: use include directory from APXS; thanks @abbra
- pass missing argument to oauth2_error in _oauth2_dpop_jti_validate; thanks @abbra
02/02/2021
- avoid creating files for anonymous shared memory segments; see #18
- release 1.4.1
01/30/2021
- fix Apache cleanup routines; see zmartzone/liboauth2#18 and zmartzone/mod_oauth2#7
01/26/2021
- add support for RFC 8705 OAuth 2.0 Mutual-TLS Certificate-Bound Access Tokens
https://tools.ietf.org/html/rfc8705; thanks @vdzhuvinov
12/23/2020
- use per-process semaphore locking to prevent multi-process issue; see #18
- release 1.4.0.1
12/21/2020
- release 1.4.0
12/03/2020
- add oauth2_cfg_openidc_set_options for configurable state cookie handling
12/02/2020
- cleanup OIDC expired/superfluous state cookies; closes zmartzone/ngx_openidc_module#6
11/13/2020
- add support for PKCE
11/12/2020
- separate OpenID client configs and named providers
- fix parsing in oauth2_cfg_set_flag_slot
- add configurable state and session cookie paths
11/11/2020
- fix session cache handler cloning
- support configurable cookie path for session cookie
11/09/2020
- refactored caching; use named caches consistently
11/08/2020
- use endpoint more consistently
- harmonize naming of endpoint, endpoint auth and ropc
11/07/2020
- don't use automake config.h; closes #10; thanks @babelouest
10/07/2020
- add support for DPOP bound access tokens
- bump to 1.4.0-dev
02/27/2020
- lock access to cache globals
- log corrections and improvements
02/26/2020
- resolve some TODOs; valgrind
- bump to 1.3.0
02/25/2020
- change to named sessions
02/21/2020
- add serialized id_token to session
- externalize oauth2_jose_jwt_verify and allow verification context to be NULL
- bump to 1.2.5
02/13/2020
- add userinfo endpoint request and claims
- bump to 1.2.4
- change to named cache configurations
02/10/2020
- implement session expiry checks
- bump to 1.2.3
02/05/2020
- add missing ROPC config functions
- bump to 1.2.2
02/04/2020
- add generic endpoint config struct and ROPC client capability
- bump to 1.2.1 and bump copyright year
01/31/2020
- sane session cfg defaults
09/12/2019
- change http request header function naming
- more openidc handling
- bump to 1.2.0
09/02/2019
- fix type (auth->client_secret_jwt.aud = NULL); closes #3; thanks @pengjiaoyang
08/19/2019
- add first outline of openidc and sessions
07/03/2019
- return status code from HTTP callouts
- bump to version 1.1.1
07/01/2019
- encapsulate oauth2_log_sink_t
- bump to version 1.1.0
05/20/2019
- add Apache Require claim authorization functions
- bump to version 1.0.1
03/22/2019
- initial import of version 1.0.0