feat: support OIDC id_token

- generate JWT id_token in token exchange
- store optional nonce in authorization object
- switch to RS256 algorithm for JWT signature
- add JWKs endpoint to provide OIDC clients with public keys
This commit is contained in:
Matthieu Bessat 2024-12-12 01:12:40 +01:00
parent ca84a0f99f
commit d982f2af0d
29 changed files with 255 additions and 82 deletions

49
Cargo.lock generated
View file

@ -349,6 +349,12 @@ dependencies = [
"windows-targets 0.52.6",
]
[[package]]
name = "base64"
version = "0.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
[[package]]
name = "base64"
version = "0.21.7"
@ -966,11 +972,13 @@ dependencies = [
"chrono",
"env_logger",
"fully_pub",
"jsonwebkey-convert",
"jsonwebtoken",
"kernel",
"log",
"minijinja",
"minijinja-embed",
"pem 3.0.4",
"serde",
"serde_json",
"serde_urlencoded",
@ -1238,6 +1246,20 @@ dependencies = [
"wasm-bindgen",
]
[[package]]
name = "jsonwebkey-convert"
version = "0.3.0"
dependencies = [
"base64 0.13.1",
"lazy_static",
"num-bigint",
"pem 0.8.3",
"serde",
"serde_json",
"simple_asn1 0.5.4",
"thiserror 1.0.69",
]
[[package]]
name = "jsonwebtoken"
version = "9.3.0"
@ -1246,11 +1268,11 @@ checksum = "b9ae10193d25051e74945f1ea2d0b42e03cc3b890f7e4cc5faa44997d808193f"
dependencies = [
"base64 0.21.7",
"js-sys",
"pem",
"pem 3.0.4",
"ring",
"serde",
"serde_json",
"simple_asn1",
"simple_asn1 0.6.2",
]
[[package]]
@ -1561,6 +1583,17 @@ version = "1.0.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a"
[[package]]
name = "pem"
version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fd56cbd21fea48d0c440b41cd69c589faacade08c992d9a54e471b79d0fd13eb"
dependencies = [
"base64 0.13.1",
"once_cell",
"regex",
]
[[package]]
name = "pem"
version = "3.0.4"
@ -1921,6 +1954,18 @@ dependencies = [
"rand_core",
]
[[package]]
name = "simple_asn1"
version = "0.5.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8eb4ea60fb301dc81dfc113df680571045d375ab7345d171c5dc7d7e13107a80"
dependencies = [
"chrono",
"num-bigint",
"num-traits",
"thiserror 1.0.69",
]
[[package]]
name = "simple_asn1"
version = "0.6.2"