Skip to content

Commit f75203e

Browse files
bjmcJon Wayne Parrott
authored and
Jon Wayne Parrott
committed
Remove b64 padding from PKCE values, per RFC7636 (googleapis#683)
1 parent f7f656d commit f75203e

File tree

2 files changed

+7
-5
lines changed

2 files changed

+7
-5
lines changed

oauth2client/_pkce.py

+5-3
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ def code_verifier(n_bytes=64):
3838
Returns:
3939
Bytestring, representing urlsafe base64-encoded random data.
4040
"""
41-
verifier = base64.urlsafe_b64encode(os.urandom(n_bytes))
41+
verifier = base64.urlsafe_b64encode(os.urandom(n_bytes)).rstrip(b'=')
4242
# https://tools.ietf.org/html/rfc7636#section-4.1
4343
# minimum length of 43 characters and a maximum length of 128 characters.
4444
if len(verifier) < 43:
@@ -60,6 +60,8 @@ def code_challenge(verifier):
6060
code_verifier().
6161
6262
Returns:
63-
Bytestring, representing a urlsafe base64-encoded sha256 hash digest.
63+
Bytestring, representing a urlsafe base64-encoded sha256 hash digest,
64+
without '=' padding.
6465
"""
65-
return base64.urlsafe_b64encode(hashlib.sha256(verifier).digest())
66+
digest = hashlib.sha256(verifier).digest()
67+
return base64.urlsafe_b64encode(digest).rstrip(b'=')

tests/test__pkce.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ def test_verifier(self, fake_urandom):
3333
fake_urandom.return_value = canned_randomness
3434
expected = (
3535
b'mBBEN_O3qvzd003ioywGoLCptI_L0PWGTjJwjF0hV5rt'
36-
b'NTSZnY12XKcvgfNKmMOQ7rCMt1pjIwVNME8I2gkfBw=='
36+
b'NTSZnY12XKcvgfNKmMOQ7rCMt1pjIwVNME8I2gkfBw'
3737
)
3838
result = _pkce.code_verifier()
3939
self.assertEqual(result, expected)
@@ -50,5 +50,5 @@ def test_verifier_too_short(self):
5050

5151
def test_challenge(self):
5252
result = _pkce.code_challenge(b'SOME_VERIFIER')
53-
expected = b'6xJCQsjTtS3zjUwd8_ZqH0SyviGHnp5PsHXWKOCqDuI='
53+
expected = b'6xJCQsjTtS3zjUwd8_ZqH0SyviGHnp5PsHXWKOCqDuI'
5454
self.assertEqual(result, expected)

0 commit comments

Comments
 (0)