diff --git a/Cargo.lock b/Cargo.lock
index 79e960dde4b5b9e0d81d3c91f74b08b53500017d..56938ebdfab98ad849ac56756bf91bdc3d01300f 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -416,12 +416,6 @@ version = "0.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf"
 
-[[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"
@@ -631,6 +625,12 @@ version = "1.0.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
 
+[[package]]
+name = "cfg_aliases"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724"
+
 [[package]]
 name = "chrono"
 version = "0.4.39"
@@ -1370,7 +1370,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d"
 dependencies = [
  "libc",
- "windows-sys 0.52.0",
+ "windows-sys 0.59.0",
 ]
 
 [[package]]
@@ -1791,7 +1791,7 @@ dependencies = [
  "gobject-sys",
  "libc",
  "system-deps",
- "windows-sys 0.52.0",
+ "windows-sys 0.59.0",
 ]
 
 [[package]]
@@ -2743,6 +2743,7 @@ dependencies = [
  "pin-project-lite",
  "smallvec",
  "tokio",
+ "want",
 ]
 
 [[package]]
@@ -2756,7 +2757,26 @@ dependencies = [
  "hyper 0.14.32",
  "rustls 0.21.12",
  "tokio",
- "tokio-rustls",
+ "tokio-rustls 0.24.1",
+]
+
+[[package]]
+name = "hyper-rustls"
+version = "0.27.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2d191583f3da1305256f22463b9bb0471acad48a4e534a5218b9963e9c1f59b2"
+dependencies = [
+ "futures-util",
+ "http 1.2.0",
+ "hyper 1.6.0",
+ "hyper-util",
+ "rustls 0.23.23",
+ "rustls-native-certs 0.8.1",
+ "rustls-pki-types",
+ "tokio",
+ "tokio-rustls 0.26.1",
+ "tower-service",
+ "webpki-roots",
 ]
 
 [[package]]
@@ -2766,12 +2786,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4"
 dependencies = [
  "bytes",
+ "futures-channel",
  "futures-util",
  "http 1.2.0",
  "http-body 1.0.1",
  "hyper 1.6.0",
  "pin-project-lite",
+ "socket2 0.5.8",
  "tokio",
+ "tower-service",
+ "tracing",
 ]
 
 [[package]]
@@ -3020,7 +3044,7 @@ checksum = "e19b23d53f35ce9f56aebc7d1bb4e6ac1e9c0db7ac85c8d1760c04379edced37"
 dependencies = [
  "hermit-abi 0.4.0",
  "libc",
- "windows-sys 0.52.0",
+ "windows-sys 0.59.0",
 ]
 
 [[package]]
@@ -3091,7 +3115,7 @@ dependencies = [
  "portable-atomic",
  "portable-atomic-util",
  "serde",
- "windows-sys 0.52.0",
+ "windows-sys 0.59.0",
 ]
 
 [[package]]
@@ -3314,14 +3338,14 @@ dependencies = [
  "pbjson-types",
  "prost",
  "rand 0.9.0",
- "reqwest",
+ "reqwest 0.11.27",
  "scopeguard",
  "serde",
  "serde_json",
  "sha2",
  "thiserror 1.0.69",
  "tokio",
- "tokio-tungstenite",
+ "tokio-tungstenite 0.20.1",
  "url",
 ]
 
@@ -3581,16 +3605,16 @@ dependencies = [
 
 [[package]]
 name = "oauth2"
-version = "4.4.2"
+version = "5.0.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c38841cdd844847e3e7c8d29cef9dcfed8877f8f56f9071f77843ecf3baf937f"
+checksum = "51e219e79014df21a225b1860a479e2dcd7cbd9130f4defd4bd0e191ea31d67d"
 dependencies = [
- "base64 0.13.1",
+ "base64 0.22.1",
  "chrono",
  "getrandom 0.2.15",
- "http 0.2.12",
+ "http 1.2.0",
  "rand 0.8.5",
- "reqwest",
+ "reqwest 0.12.12",
  "serde",
  "serde_json",
  "serde_path_to_error",
@@ -3634,16 +3658,16 @@ checksum = "945462a4b81e43c4e3ba96bd7b49d834c6f61198356aa858733bc4acf3cbe62e"
 
 [[package]]
 name = "openidconnect"
-version = "3.5.0"
+version = "4.0.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f47e80a9cfae4462dd29c41e987edd228971d6565553fbc14b8a11e666d91590"
+checksum = "6dd50d4a5e7730e754f94d977efe61f611aadd3131f6a2b464f6e3a4167e8ef7"
 dependencies = [
- "base64 0.13.1",
+ "base64 0.21.7",
  "chrono",
  "dyn-clone",
  "ed25519-dalek",
  "hmac",
- "http 0.2.12",
+ "http 1.2.0",
  "itertools 0.10.5",
  "log",
  "oauth2",
@@ -3653,7 +3677,6 @@ dependencies = [
  "rsa",
  "serde",
  "serde-value",
- "serde_derive",
  "serde_json",
  "serde_path_to_error",
  "serde_plain",
@@ -3725,7 +3748,7 @@ dependencies = [
  "opentalk-types-signaling-recording-service",
  "opentalk-version",
  "pin-project-lite",
- "reqwest",
+ "reqwest 0.12.12",
  "serde",
  "serde_json",
  "service-probe",
@@ -3734,7 +3757,7 @@ dependencies = [
  "tokio",
  "tokio-executor-trait",
  "tokio-reactor-trait",
- "tokio-tungstenite",
+ "tokio-tungstenite 0.26.2",
  "urlencoding",
 ]
 
@@ -4364,7 +4387,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "22505a5c94da8e3b7c2996394d1c933236c4d743e81a410bcca4e6989fc066a4"
 dependencies = [
  "bytes",
- "heck 0.4.1",
+ "heck 0.5.0",
  "itertools 0.12.1",
  "log",
  "multimap",
@@ -4400,6 +4423,58 @@ dependencies = [
  "prost",
 ]
 
+[[package]]
+name = "quinn"
+version = "0.11.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62e96808277ec6f97351a2380e6c25114bc9e67037775464979f3037c92d05ef"
+dependencies = [
+ "bytes",
+ "pin-project-lite",
+ "quinn-proto",
+ "quinn-udp",
+ "rustc-hash",
+ "rustls 0.23.23",
+ "socket2 0.5.8",
+ "thiserror 2.0.11",
+ "tokio",
+ "tracing",
+]
+
+[[package]]
+name = "quinn-proto"
+version = "0.11.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a2fe5ef3495d7d2e377ff17b1a8ce2ee2ec2a18cde8b6ad6619d65d0701c135d"
+dependencies = [
+ "bytes",
+ "getrandom 0.2.15",
+ "rand 0.8.5",
+ "ring",
+ "rustc-hash",
+ "rustls 0.23.23",
+ "rustls-pki-types",
+ "slab",
+ "thiserror 2.0.11",
+ "tinyvec",
+ "tracing",
+ "web-time",
+]
+
+[[package]]
+name = "quinn-udp"
+version = "0.5.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e46f3055866785f6b92bc6164b76be02ca8f2eb4b002c0354b28cf4c119e5944"
+dependencies = [
+ "cfg_aliases",
+ "libc",
+ "once_cell",
+ "socket2 0.5.8",
+ "tracing",
+ "windows-sys 0.59.0",
+]
+
 [[package]]
 name = "quote"
 version = "1.0.38"
@@ -4572,7 +4647,7 @@ dependencies = [
  "http 0.2.12",
  "http-body 0.4.6",
  "hyper 0.14.32",
- "hyper-rustls",
+ "hyper-rustls 0.24.2",
  "ipnet",
  "js-sys",
  "log",
@@ -4581,24 +4656,67 @@ dependencies = [
  "percent-encoding",
  "pin-project-lite",
  "rustls 0.21.12",
- "rustls-native-certs",
+ "rustls-native-certs 0.6.3",
  "rustls-pemfile 1.0.4",
  "serde",
  "serde_json",
  "serde_urlencoded",
- "sync_wrapper",
+ "sync_wrapper 0.1.2",
  "system-configuration",
  "tokio",
- "tokio-rustls",
+ "tokio-rustls 0.24.1",
+ "tower-service",
+ "url",
+ "wasm-bindgen",
+ "wasm-bindgen-futures",
+ "web-sys",
+ "winreg",
+]
+
+[[package]]
+name = "reqwest"
+version = "0.12.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "43e734407157c3c2034e0258f5e4473ddb361b1e85f95a66690d67264d7cd1da"
+dependencies = [
+ "base64 0.22.1",
+ "bytes",
+ "futures-core",
+ "futures-util",
+ "http 1.2.0",
+ "http-body 1.0.1",
+ "http-body-util",
+ "hyper 1.6.0",
+ "hyper-rustls 0.27.5",
+ "hyper-util",
+ "ipnet",
+ "js-sys",
+ "log",
+ "mime",
+ "once_cell",
+ "percent-encoding",
+ "pin-project-lite",
+ "quinn",
+ "rustls 0.23.23",
+ "rustls-native-certs 0.8.1",
+ "rustls-pemfile 2.2.0",
+ "rustls-pki-types",
+ "serde",
+ "serde_json",
+ "serde_urlencoded",
+ "sync_wrapper 1.0.2",
+ "tokio",
+ "tokio-rustls 0.26.1",
  "tokio-util",
+ "tower",
  "tower-service",
  "url",
  "wasm-bindgen",
  "wasm-bindgen-futures",
  "wasm-streams",
  "web-sys",
- "webpki-roots 0.25.4",
- "winreg",
+ "webpki-roots",
+ "windows-registry",
 ]
 
 [[package]]
@@ -4669,6 +4787,12 @@ version = "0.1.24"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f"
 
+[[package]]
+name = "rustc-hash"
+version = "2.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d"
+
 [[package]]
 name = "rustc_version"
 version = "0.4.1"
@@ -4726,7 +4850,7 @@ dependencies = [
  "errno",
  "libc",
  "linux-raw-sys 0.4.15",
- "windows-sys 0.52.0",
+ "windows-sys 0.59.0",
 ]
 
 [[package]]
@@ -4764,7 +4888,7 @@ dependencies = [
  "rustls 0.23.23",
  "rustls-pki-types",
  "rustls-webpki 0.102.8",
- "webpki-roots 0.26.8",
+ "webpki-roots",
 ]
 
 [[package]]
@@ -4776,7 +4900,19 @@ dependencies = [
  "openssl-probe",
  "rustls-pemfile 1.0.4",
  "schannel",
- "security-framework",
+ "security-framework 2.11.1",
+]
+
+[[package]]
+name = "rustls-native-certs"
+version = "0.8.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7fcff2dd52b58a8d98a70243663a0d234c4e2b79235637849d15913394a247d3"
+dependencies = [
+ "openssl-probe",
+ "rustls-pki-types",
+ "schannel",
+ "security-framework 3.2.0",
 ]
 
 [[package]]
@@ -4802,6 +4938,9 @@ name = "rustls-pki-types"
 version = "1.11.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "917ce264624a4b4db1c364dcc35bfca9ded014d0a958cd47ad3e960e988ea51c"
+dependencies = [
+ "web-time",
+]
 
 [[package]]
 name = "rustls-webpki"
@@ -4923,6 +5062,19 @@ dependencies = [
  "security-framework-sys",
 ]
 
+[[package]]
+name = "security-framework"
+version = "3.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "271720403f46ca04f7ba6f55d438f8bd878d6b8ca0a1046e8228c4145bcbb316"
+dependencies = [
+ "bitflags 2.8.0",
+ "core-foundation 0.10.0",
+ "core-foundation-sys",
+ "libc",
+ "security-framework-sys",
+]
+
 [[package]]
 name = "security-framework-sys"
 version = "2.14.0"
@@ -5188,7 +5340,7 @@ version = "0.8.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "03c3c6b7927ffe7ecaa769ee0e3994da3b8cafc8f444578982c83ecb161af917"
 dependencies = [
- "heck 0.4.1",
+ "heck 0.5.0",
  "proc-macro2",
  "quote",
  "syn",
@@ -5296,6 +5448,15 @@ version = "0.1.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160"
 
+[[package]]
+name = "sync_wrapper"
+version = "1.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263"
+dependencies = [
+ "futures-core",
+]
+
 [[package]]
 name = "synstructure"
 version = "0.13.1"
@@ -5384,7 +5545,7 @@ dependencies = [
  "getrandom 0.3.1",
  "once_cell",
  "rustix 0.38.44",
- "windows-sys 0.52.0",
+ "windows-sys 0.59.0",
 ]
 
 [[package]]
@@ -5557,6 +5718,16 @@ dependencies = [
  "tokio",
 ]
 
+[[package]]
+name = "tokio-rustls"
+version = "0.26.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5f6d0975eaace0cf0fcadee4e4aaa5da15b5c079146f2cffb67c113be122bf37"
+dependencies = [
+ "rustls 0.23.23",
+ "tokio",
+]
+
 [[package]]
 name = "tokio-stream"
 version = "0.1.17"
@@ -5577,11 +5748,26 @@ dependencies = [
  "futures-util",
  "log",
  "rustls 0.21.12",
- "rustls-native-certs",
+ "rustls-native-certs 0.6.3",
  "tokio",
- "tokio-rustls",
- "tungstenite",
- "webpki-roots 0.25.4",
+ "tokio-rustls 0.24.1",
+ "tungstenite 0.20.1",
+]
+
+[[package]]
+name = "tokio-tungstenite"
+version = "0.26.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a9daff607c6d2bf6c16fd681ccb7eecc83e4e2cdc1ca067ffaadfca5de7f084"
+dependencies = [
+ "futures-util",
+ "log",
+ "rustls 0.23.23",
+ "rustls-pki-types",
+ "tokio",
+ "tokio-rustls 0.26.1",
+ "tungstenite 0.26.2",
+ "webpki-roots",
 ]
 
 [[package]]
@@ -5631,6 +5817,27 @@ dependencies = [
  "winnow 0.7.2",
 ]
 
+[[package]]
+name = "tower"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d039ad9159c98b70ecfd540b2573b97f7f52c3e8d9f8ad57a24b916a536975f9"
+dependencies = [
+ "futures-core",
+ "futures-util",
+ "pin-project-lite",
+ "sync_wrapper 1.0.2",
+ "tokio",
+ "tower-layer",
+ "tower-service",
+]
+
+[[package]]
+name = "tower-layer"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e"
+
 [[package]]
 name = "tower-service"
 version = "0.3.3"
@@ -5698,6 +5905,25 @@ dependencies = [
  "utf-8",
 ]
 
+[[package]]
+name = "tungstenite"
+version = "0.26.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4793cb5e56680ecbb1d843515b23b6de9a75eb04b66643e256a396d43be33c13"
+dependencies = [
+ "bytes",
+ "data-encoding",
+ "http 1.2.0",
+ "httparse",
+ "log",
+ "rand 0.9.0",
+ "rustls 0.23.23",
+ "rustls-pki-types",
+ "sha1",
+ "thiserror 2.0.11",
+ "utf-8",
+]
+
 [[package]]
 name = "typenum"
 version = "1.17.0"
@@ -5984,10 +6210,14 @@ dependencies = [
 ]
 
 [[package]]
-name = "webpki-roots"
-version = "0.25.4"
+name = "web-time"
+version = "1.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1"
+checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb"
+dependencies = [
+ "js-sys",
+ "wasm-bindgen",
+]
 
 [[package]]
 name = "webpki-roots"
@@ -6020,7 +6250,7 @@ checksum = "3457df230a567f12bb337d197d70abce9409485552dfe7b732c0f23207f24ebc"
 dependencies = [
  "fs2",
  "regex",
- "reqwest",
+ "reqwest 0.11.27",
  "scratch",
  "semver",
  "zip",
@@ -6048,7 +6278,7 @@ version = "0.1.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
 dependencies = [
- "windows-sys 0.48.0",
+ "windows-sys 0.59.0",
 ]
 
 [[package]]
@@ -6084,7 +6314,7 @@ checksum = "d2ed2439a290666cd67ecce2b0ffaad89c2a56b976b736e6ece670297897832d"
 dependencies = [
  "windows-implement",
  "windows-interface",
- "windows-result",
+ "windows-result 0.1.2",
  "windows-targets 0.52.6",
 ]
 
@@ -6110,6 +6340,17 @@ dependencies = [
  "syn",
 ]
 
+[[package]]
+name = "windows-registry"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e400001bb720a623c1c69032f8e3e4cf09984deec740f007dd2b03ec864804b0"
+dependencies = [
+ "windows-result 0.2.0",
+ "windows-strings",
+ "windows-targets 0.52.6",
+]
+
 [[package]]
 name = "windows-result"
 version = "0.1.2"
@@ -6119,6 +6360,25 @@ dependencies = [
  "windows-targets 0.52.6",
 ]
 
+[[package]]
+name = "windows-result"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e"
+dependencies = [
+ "windows-targets 0.52.6",
+]
+
+[[package]]
+name = "windows-strings"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10"
+dependencies = [
+ "windows-result 0.2.0",
+ "windows-targets 0.52.6",
+]
+
 [[package]]
 name = "windows-sys"
 version = "0.45.0"
diff --git a/Cargo.toml b/Cargo.toml
index 13f5b013b9e23237a03744f58ea0a22dbcd1da15..847ac18da56ddefd657cfeed75ca7012086f7297 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -25,9 +25,9 @@ lapin = { version = "2.3", default-features = false, features = [
   "rustls-webpki-roots-certs",
 ] }
 log = "0.4"
-openidconnect = "3"
+openidconnect = "4"
 pin-project-lite = "0.2"
-reqwest = { version = "0.11", default-features = false, features = [
+reqwest = { version = "0.12", default-features = false, features = [
   "json",
   "stream",
   "rustls-tls-native-roots",
@@ -45,7 +45,7 @@ tokio = { version = "1", features = [
   "fs",
   "signal",
 ] }
-tt = { package = "tokio-tungstenite", version = "0.20", features = [
+tt = { package = "tokio-tungstenite", version = "0.26", features = [
   "rustls-tls-webpki-roots",
 ] }
 types-common = { package = "opentalk-types-common", version = "0.31", features = [
diff --git a/deny.toml b/deny.toml
index 5eb7a91650b5ecb5c9024a2b3ed5342e888f8185..5df20340e3fe0005daac8442fdc0f625d3660f4f 100644
--- a/deny.toml
+++ b/deny.toml
@@ -162,7 +162,6 @@ deny = [
 skip = [
   { name = "async-io", version = "=1.13.0" },
   { name = "async-lock", version = "=2.8.0" },
-  { name = "base64", version = "=0.13.1" },
   { name = "base64", version = "=0.21.7" },
   { name = "bitflags", version = "=1.3" },
   { name = "env_logger", version = "=0.10.2" },
@@ -174,6 +173,7 @@ skip = [
   { name = "heck", version = "=0.4.1" },
   { name = "http-body", version = "=0.4.6" },
   { name = "http", version = "=0.2.12" },
+  { name = "hyper-rustls", version = "0.24.2" },
   { name = "hyper", version = "0.14" },
   { name = "itertools", version = "=0.10.5" },
   { name = "itertools", version = "=0.11.0" },
@@ -187,14 +187,19 @@ skip = [
   { name = "rand_chacha", version = "0.3" },
   { name = "rand_core", version = "0.6" },
   { name = "rand", version = "0.8" },
+  { name = "reqwest", version = "0.11.27" },
   { name = "rustix", version = "=0.37" },
+  { name = "rustls-native-certs", version = "0.6.3" },
   { name = "rustls-pemfile", version = "=1.0.4" },
   { name = "rustls-webpki", version = "=0.101.7" },
   { name = "rustls", version = "=0.21.12" },
   { name = "socket2", version = "=0.4" },
+  { name = "sync_wrapper", version = "0.1.2" },
   { name = "thiserror-impl", version = "1" },
   { name = "thiserror", version = "1" },
-  { name = "webpki-roots", version = "=0.25.4" },
+  { name = "tokio-rustls", version = "0.24.1" },
+  { name = "tokio-tungstenite", version = "0.20.1" },
+  { name = "tungstenite", version = "0.20.1" },
   { name = "winnow", version = "0.6" },
   { name = "zerocopy", version = "0.8" },
 ]
diff --git a/src/http.rs b/src/http.rs
index 62a87135fa351aacb7b896b42693b60eeb75d955..749931d6c58352a6131bfbbb895cf0295d0e1b1a 100644
--- a/src/http.rs
+++ b/src/http.rs
@@ -4,15 +4,20 @@
 
 //! HTTP calls made by this library (except for websockets)
 
-use std::{
-    future::Future,
-    pin::Pin,
-    time::{Duration, Instant},
-};
+use std::time::{Duration, Instant};
 
 use anyhow::{bail, Context, Result};
 use futures::{SinkExt, StreamExt};
-use openidconnect::{reqwest::Error, AccessToken, HttpRequest, HttpResponse, OAuth2TokenResponse};
+use openidconnect::{
+    core::{
+        CoreAuthDisplay, CoreAuthPrompt, CoreClient, CoreErrorResponseType, CoreGenderClaim,
+        CoreJsonWebKey, CoreJweContentEncryptionAlgorithm, CoreJwsSigningAlgorithm,
+        CoreProviderMetadata, CoreRevocableToken, CoreTokenType,
+    },
+    AccessToken, EmptyAdditionalClaims, EmptyExtraTokenFields, EndpointNotSet, EndpointSet,
+    IdTokenFields, OAuth2TokenResponse, RevocationErrorResponseType, StandardErrorResponse,
+    StandardTokenIntrospectionResponse, StandardTokenResponse,
+};
 use reqwest::{header::HeaderValue, StatusCode};
 use serde::{Deserialize, Serialize};
 use tokio::sync::{broadcast, RwLock};
@@ -51,10 +56,39 @@ impl FileExtension {
     }
 }
 
+type OidcClient = openidconnect::Client<
+    EmptyAdditionalClaims,
+    CoreAuthDisplay,
+    CoreGenderClaim,
+    CoreJweContentEncryptionAlgorithm,
+    CoreJsonWebKey,
+    CoreAuthPrompt,
+    StandardErrorResponse<CoreErrorResponseType>,
+    StandardTokenResponse<
+        IdTokenFields<
+            EmptyAdditionalClaims,
+            EmptyExtraTokenFields,
+            CoreGenderClaim,
+            CoreJweContentEncryptionAlgorithm,
+            CoreJwsSigningAlgorithm,
+        >,
+        CoreTokenType,
+    >,
+    StandardTokenIntrospectionResponse<EmptyExtraTokenFields, CoreTokenType>,
+    CoreRevocableToken,
+    StandardErrorResponse<RevocationErrorResponseType>,
+    EndpointSet,
+    EndpointNotSet,
+    EndpointNotSet,
+    EndpointNotSet,
+    EndpointSet,
+    EndpointNotSet,
+>;
+
 #[derive(Debug)]
 pub(crate) struct HttpClient {
     client: reqwest::Client,
-    oidc: openidconnect::core::CoreClient,
+    oidc: OidcClient,
     access_token: RwLock<AccessToken>,
 }
 
@@ -63,7 +97,7 @@ impl HttpClient {
     #[allow(dead_code)]
     pub(crate) fn new(
         client: reqwest::Client,
-        oidc: openidconnect::core::CoreClient,
+        oidc: OidcClient,
         access_token: RwLock<AccessToken>,
     ) -> Self {
         Self {
@@ -76,25 +110,26 @@ impl HttpClient {
     pub(crate) async fn discover(settings: &AuthSettings) -> Result<Self> {
         let client = reqwest::Client::new();
 
-        let metadata = openidconnect::core::CoreProviderMetadata::discover_async(
-            settings.issuer.clone(),
-            async_http_client(client.clone()),
-        )
-        .await?;
+        let metadata =
+            CoreProviderMetadata::discover_async(settings.issuer.clone(), &client).await?;
 
-        let oidc = openidconnect::core::CoreClient::new(
+        let oidc = CoreClient::new(
             settings.client_id.clone(),
-            Some(settings.client_secret.clone()),
             settings.issuer.clone(),
-            metadata.authorization_endpoint().clone(),
-            metadata.token_endpoint().cloned(),
-            None,
             metadata.jwks().clone(),
+        )
+        .set_client_secret(settings.client_secret.clone())
+        .set_auth_uri(metadata.authorization_endpoint().clone())
+        .set_token_uri(
+            metadata
+                .token_endpoint()
+                .context("Missing token endpoint url in OIDC metadata")?
+                .clone(),
         );
 
         let response = oidc
             .exchange_client_credentials()
-            .request_async(async_http_client(client.clone()))
+            .request_async(&client)
             .await?;
 
         Ok(Self {
@@ -114,7 +149,7 @@ impl HttpClient {
         let response = self
             .oidc
             .exchange_client_credentials()
-            .request_async(async_http_client(self.client.clone()))
+            .request_async(&self.client)
             .await?;
 
         *token = response.access_token().clone();
@@ -230,7 +265,7 @@ impl HttpClient {
                         bail!("Upload canceled, there was no websocket heartbeat within 15 seconds.");
                     }
 
-                    tx.send(tt::tungstenite::Message::Ping("heartbeat".as_bytes().to_owned()))
+                    tx.send(tt::tungstenite::Message::Ping("heartbeat".into()))
                         .await
                         .context("Data could not be send to the websocket")?;
                 }
@@ -240,7 +275,7 @@ impl HttpClient {
                     };
 
                     let part_num = u32::from_be_bytes(bytes[..4].try_into().unwrap_or_default());
-                    tx.send(tt::tungstenite::Message::Binary(bytes))
+                    tx.send(tt::tungstenite::Message::Binary(bytes.into()))
                         .await
                         .context("Data could not be send to the websocket")?;
 
@@ -301,36 +336,3 @@ struct ApiError {
 struct StartResponse {
     ticket: String,
 }
-
-type BoxedHttpResponseFuture =
-    Box<dyn Future<Output = Result<HttpResponse, Error<reqwest::Error>>> + Send>;
-
-fn async_http_client(
-    client: reqwest::Client,
-) -> impl Fn(HttpRequest) -> Pin<BoxedHttpResponseFuture> {
-    move |request| Box::pin(async_http_client_inner(client.clone(), request))
-}
-
-async fn async_http_client_inner(
-    client: reqwest::Client,
-    request: HttpRequest,
-) -> Result<HttpResponse, Error<reqwest::Error>> {
-    let mut request_builder = client
-        .request(request.method, request.url.as_str())
-        .body(request.body);
-    for (name, value) in &request.headers {
-        request_builder = request_builder.header(name.as_str(), value.as_bytes());
-    }
-    let request = request_builder.build().map_err(Error::Reqwest)?;
-
-    let response = client.execute(request).await.map_err(Error::Reqwest)?;
-
-    let status_code = response.status();
-    let headers = response.headers().clone();
-    let chunks = response.bytes().await.map_err(Error::Reqwest)?;
-    Ok(HttpResponse {
-        status_code,
-        headers,
-        body: chunks.to_vec(),
-    })
-}
diff --git a/src/signaling.rs b/src/signaling.rs
index fd0a384ad4975dd95c7404a715424cd0632db851..46bb9e8cc5bab4e623004d09a5865559c25297f9 100644
--- a/src/signaling.rs
+++ b/src/signaling.rs
@@ -97,13 +97,16 @@ impl Signaling {
             .context("failed create websocket connection")?;
 
         stream
-            .send(Message::Text(serde_json::to_string(&serde_json::json!({
-                "namespace":"control",
-                "payload": {
-                    "action":"join",
-                    "display_name": "recorder"
-                }
-            }))?))
+            .send(Message::Text(
+                serde_json::to_string(&serde_json::json!({
+                    "namespace":"control",
+                    "payload": {
+                        "action":"join",
+                        "display_name": "recorder"
+                    }
+                }))?
+                .into(),
+            ))
             .await?;
 
         Ok(Self {
@@ -168,7 +171,9 @@ impl Signaling {
         log::trace!("send signaling message {:?}", msg);
         self.connection
             .send(Message::Text(
-                serde_json::to_string(&msg).context("failed to serialize message")?,
+                serde_json::to_string(&msg)
+                    .context("failed to serialize message")?
+                    .into(),
             ))
             .await
             .context("failed to send message")