Skip to content

Commit dcd8716

Browse files
committed
resolves client credentials encoding issue #128
* Remove the "NOT RECOMMENDED" paragraph (but leave sentence "The parameters can only be transmitted in the request content and MUST NOT be included in the request URI.") * Change AS requirements to MUST support post body, MAY support HTTP Basic * Add a note about historic interop problems with HTTP Basic closes #128
1 parent 4b838e0 commit dcd8716

File tree

1 file changed

+32
-24
lines changed

1 file changed

+32
-24
lines changed

draft-ietf-oauth-v2-1.md

Lines changed: 32 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1032,23 +1032,9 @@ See {{security-client-authentication}} for additional details.
10321032

10331033
### Client Secret {#client-secret}
10341034

1035-
Clients in possession of a client secret, sometimes known as a client password,
1036-
MAY use the HTTP Basic
1037-
authentication scheme as defined in Section 11 of {{RFC9110}} to authenticate with
1038-
the authorization server. The client identifier is encoded using the
1039-
`application/x-www-form-urlencoded` encoding algorithm per
1040-
{{application-x-www-form-urlencoded}}, and the encoded value is used as the username; the client
1041-
secret is encoded using the same algorithm and used as the
1042-
password. The authorization server MUST support the HTTP Basic
1043-
authentication scheme for authenticating clients that were issued a
1044-
client secret.
1045-
1046-
For example (with extra line breaks for display purposes only):
1047-
1048-
Authorization: Basic czZCaGRSa3F0Mzo3RmpmcDBaQnIxS3REUmJuZlZkbUl3
1049-
1050-
In addition to that, the authorization server MAY support including the
1051-
client credentials in the request content using the following
1035+
To support clients in possession of a client secret,
1036+
the authorization server MUST support the client including the
1037+
client credentials in the request body content using the following
10521038
parameters:
10531039

10541040
"client_id":
@@ -1058,12 +1044,8 @@ parameters:
10581044
"client_secret":
10591045
: REQUIRED. The client secret.
10601046

1061-
Including the client credentials in the request content using the two
1062-
parameters is NOT RECOMMENDED and SHOULD be limited to clients unable
1063-
to directly utilize the HTTP Basic authentication scheme (or other
1064-
password-based HTTP authentication schemes). The parameters can only
1065-
be transmitted in the request content and MUST NOT be included in the
1066-
request URI.
1047+
The parameters can only be transmitted in the request content and MUST NOT
1048+
be included in the request URI.
10671049

10681050
For example, a request to refresh an access token ({{refreshing-an-access-token}}) using
10691051
the content parameters (with extra line breaks for display purposes
@@ -1076,7 +1058,32 @@ only):
10761058
grant_type=refresh_token&refresh_token=tGzv3JOkF0XG5Qx2TlKWIA
10771059
&client_id=s6BhdRkqt3&client_secret=7Fjfp0ZBr1KtDRbnfVdmIw
10781060

1079-
Since this client authentication method involves a password, the
1061+
The authorization server MAY support the HTTP Basic
1062+
authentication scheme for authenticating clients that were issued a
1063+
client secret.
1064+
1065+
When using the HTTP Basic authentication scheme as defined in Section 11 of {{RFC9110}}
1066+
to authenticate with the authorization server, the client identifier is encoded using the
1067+
`application/x-www-form-urlencoded` encoding algorithm per
1068+
{{application-x-www-form-urlencoded}}, and the encoded value is used as the username; the client
1069+
secret is encoded using the same algorithm and used as the
1070+
password.
1071+
1072+
For example (with extra line breaks for display purposes only):
1073+
1074+
Authorization: Basic czZCaGRSa3F0Mzo3RmpmcDBaQnIxS3REUmJuZlZkbUl3
1075+
1076+
Note: This method of initially form-encoding the client identifier and secret,
1077+
and then using the encoded values as the HTTP Basic authentication username
1078+
and password, has led to many interoperability problems in the past. Some
1079+
implementations have missed the encoding step, or decided to only encode
1080+
certain characters, or ignored the encoding requirement when validating the
1081+
credentials, leading to clients having to special-case how they present the
1082+
credentials to individual authorization servers. Including the credentials
1083+
in the request body content avoids the encoding issues and leads to more
1084+
interoperable implementations.
1085+
1086+
Since the client secret authentication method involves a password, the
10801087
authorization server MUST protect any endpoint utilizing it against
10811088
brute force attacks.
10821089

@@ -3836,6 +3843,7 @@ Discussions around this specification have also occurred at the OAuth Security W
38363843

38373844
* Explicitly mention that Bearer is case insensitive
38383845
* Recommend against defining custom scopes that conflict with known scopes
3846+
* Change client credentials to be required to be supported in the request body to avoid HTTP Basic authentication encoding interop issues
38393847

38403848
-10
38413849

0 commit comments

Comments
 (0)