Skip to content

Commit 6bd1ef7

Browse files
committed
Pass custom http client through for the KeyStoreManager and jwks discovery
1 parent d87b7ef commit 6bd1ef7

File tree

4 files changed

+17
-16
lines changed

4 files changed

+17
-16
lines changed

jwt-authorizer/src/authorizer.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ where
5656
refresh: Option<Refresh>,
5757
validation: crate::validation::Validation,
5858
jwt_source: JwtSource,
59-
http_client: Option<Client>,
59+
http_client: Client,
6060
) -> Result<Authorizer<C>, InitError> {
6161
Ok(match key_source_type {
6262
KeySourceType::RSA(path) => {
@@ -201,7 +201,7 @@ where
201201
}
202202
KeySourceType::Jwks(url) => {
203203
let jwks_url = Url::parse(url.as_str()).map_err(|e| InitError::JwksUrlError(e.to_string()))?;
204-
let key_store_manager = KeyStoreManager::new(jwks_url, refresh.unwrap_or_default());
204+
let key_store_manager = KeyStoreManager::new(http_client, jwks_url, refresh.unwrap_or_default());
205205
Authorizer {
206206
key_source: KeySource::KeyStoreSource(key_store_manager),
207207
claims_checker,
@@ -210,10 +210,10 @@ where
210210
}
211211
}
212212
KeySourceType::Discovery(issuer_url) => {
213-
let jwks_url = Url::parse(&oidc::discover_jwks(issuer_url.as_str(), http_client).await?)
213+
let jwks_url = Url::parse(&oidc::discover_jwks(issuer_url.as_str(), &http_client).await?)
214214
.map_err(|e| InitError::JwksUrlError(e.to_string()))?;
215215

216-
let key_store_manager = KeyStoreManager::new(jwks_url, refresh.unwrap_or_default());
216+
let key_store_manager = KeyStoreManager::new(http_client, jwks_url, refresh.unwrap_or_default());
217217
Authorizer {
218218
key_source: KeySource::KeyStoreSource(key_store_manager),
219219
claims_checker,

jwt-authorizer/src/builder.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ where
233233
self.refresh,
234234
val,
235235
self.jwt_source,
236-
None,
236+
self.http_client.unwrap_or_default(),
237237
)
238238
.await?,
239239
);
@@ -249,7 +249,7 @@ where
249249
self.refresh,
250250
val,
251251
self.jwt_source,
252-
self.http_client,
252+
self.http_client.unwrap_or_default(),
253253
)
254254
.await
255255
}

jwt-authorizer/src/jwks/key_store_manager.rs

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use jsonwebtoken::{jwk::JwkSet, Algorithm};
2-
use reqwest::Url;
2+
use reqwest::{Client, Url};
33
use std::{
44
sync::Arc,
55
time::{Duration, Instant},
@@ -51,6 +51,7 @@ impl Default for Refresh {
5151

5252
#[derive(Clone)]
5353
pub struct KeyStoreManager {
54+
http_client: Client,
5455
key_url: Url,
5556
/// in case of fail loading (error or key not found), minimal interval
5657
refresh: Refresh,
@@ -67,8 +68,9 @@ pub struct KeyStore {
6768
}
6869

6970
impl KeyStoreManager {
70-
pub(crate) fn new(key_url: Url, refresh: Refresh) -> KeyStoreManager {
71+
pub(crate) fn new(http_client: Client, key_url: Url, refresh: Refresh) -> KeyStoreManager {
7172
KeyStoreManager {
73+
http_client,
7274
key_url,
7375
refresh,
7476
keystore: Arc::new(Mutex::new(KeyStore {
@@ -85,7 +87,7 @@ impl KeyStoreManager {
8587
let key = match self.refresh.strategy {
8688
RefreshStrategy::Interval => {
8789
if ks_gard.can_refresh(self.refresh.refresh_interval, self.refresh.retry_interval) {
88-
ks_gard.refresh(&self.key_url, &[]).await?;
90+
ks_gard.refresh(&self.http_client, &self.key_url, &[]).await?;
8991
}
9092
ks_gard.get_key(header)?
9193
}
@@ -95,7 +97,7 @@ impl KeyStoreManager {
9597
if let Some(jwk) = jwk_opt {
9698
jwk
9799
} else if ks_gard.can_refresh(self.refresh.refresh_interval, self.refresh.retry_interval) {
98-
ks_gard.refresh(&self.key_url, &[("kid", kid)]).await?;
100+
ks_gard.refresh(&self.http_client, &self.key_url, &[("kid", kid)]).await?;
99101
ks_gard.find_kid(kid).ok_or_else(|| AuthError::InvalidKid(kid.to_owned()))?
100102
} else {
101103
return Err(AuthError::InvalidKid(kid.to_owned()));
@@ -107,6 +109,7 @@ impl KeyStoreManager {
107109
} else if ks_gard.can_refresh(self.refresh.refresh_interval, self.refresh.retry_interval) {
108110
ks_gard
109111
.refresh(
112+
&self.http_client,
110113
&self.key_url,
111114
&[(
112115
"alg",
@@ -127,7 +130,7 @@ impl KeyStoreManager {
127130
// if jwks endpoint is down for the loading, respect retry_interval
128131
&& ks_gard.can_refresh(self.refresh.refresh_interval, self.refresh.retry_interval)
129132
{
130-
ks_gard.refresh(&self.key_url, &[]).await?;
133+
ks_gard.refresh(&self.http_client, &self.key_url, &[]).await?;
131134
}
132135
ks_gard.get_key(header)?
133136
}
@@ -151,8 +154,8 @@ impl KeyStore {
151154
}
152155
}
153156

154-
async fn refresh(&mut self, key_url: &Url, qparam: &[(&str, &str)]) -> Result<(), AuthError> {
155-
reqwest::Client::new()
157+
async fn refresh(&mut self, http_client: &Client, key_url: &Url, qparam: &[(&str, &str)]) -> Result<(), AuthError> {
158+
http_client
156159
.get(key_url.as_ref())
157160
.query(qparam)
158161
.send()

jwt-authorizer/src/oidc.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,7 @@ fn discovery_url(issuer: &str) -> Result<Url, InitError> {
2020
Ok(url)
2121
}
2222

23-
pub async fn discover_jwks(issuer: &str, client: Option<Client>) -> Result<String, InitError> {
24-
let client = client.unwrap_or_default();
25-
23+
pub async fn discover_jwks(issuer: &str, client: &Client) -> Result<String, InitError> {
2624
client
2725
.get(discovery_url(issuer)?)
2826
.send()

0 commit comments

Comments
 (0)