Skip to content

Commit c61d38c

Browse files
committed
Fix spec compliance of upstream OAuth 2.0 client auth methods
We were sending the `client_id` in all cases, but the spec says it should only be sent for the `none` and `client_secret_post` methods.
1 parent c7d0828 commit c61d38c

File tree

1 file changed

+8
-7
lines changed

1 file changed

+8
-7
lines changed

crates/oidc-client/src/types/client_credentials.rs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ impl ClientCredentials {
141141
let request = match self {
142142
ClientCredentials::None { client_id } => request.form(&RequestWithClientCredentials {
143143
body: form,
144-
client_id,
144+
client_id: Some(client_id),
145145
client_secret: None,
146146
client_assertion: None,
147147
client_assertion_type: None,
@@ -159,7 +159,7 @@ impl ClientCredentials {
159159
.basic_auth(username, Some(password))
160160
.form(&RequestWithClientCredentials {
161161
body: form,
162-
client_id,
162+
client_id: None,
163163
client_secret: None,
164164
client_assertion: None,
165165
client_assertion_type: None,
@@ -171,7 +171,7 @@ impl ClientCredentials {
171171
client_secret,
172172
} => request.form(&RequestWithClientCredentials {
173173
body: form,
174-
client_id,
174+
client_id: Some(client_id),
175175
client_secret: Some(client_secret),
176176
client_assertion: None,
177177
client_assertion_type: None,
@@ -195,7 +195,7 @@ impl ClientCredentials {
195195

196196
request.form(&RequestWithClientCredentials {
197197
body: form,
198-
client_id,
198+
client_id: None,
199199
client_secret: None,
200200
client_assertion: Some(jwt.as_str()),
201201
client_assertion_type: Some(JwtBearerClientAssertionType),
@@ -228,7 +228,7 @@ impl ClientCredentials {
228228

229229
request.form(&RequestWithClientCredentials {
230230
body: form,
231-
client_id,
231+
client_id: None,
232232
client_secret: None,
233233
client_assertion: Some(client_assertion.as_str()),
234234
client_assertion_type: Some(JwtBearerClientAssertionType),
@@ -260,7 +260,7 @@ impl ClientCredentials {
260260

261261
request.form(&RequestWithClientCredentials {
262262
body: form,
263-
client_id,
263+
client_id: Some(client_id),
264264
client_secret: Some(client_secret.as_str()),
265265
client_assertion: None,
266266
client_assertion_type: None,
@@ -359,7 +359,8 @@ struct RequestWithClientCredentials<'a, T> {
359359
#[serde(flatten)]
360360
body: T,
361361

362-
client_id: &'a str,
362+
#[serde(skip_serializing_if = "Option::is_none")]
363+
client_id: Option<&'a str>,
363364
#[serde(skip_serializing_if = "Option::is_none")]
364365
client_secret: Option<&'a str>,
365366
#[serde(skip_serializing_if = "Option::is_none")]

0 commit comments

Comments
 (0)