|
1 | 1 | """Utilities for OAuth 2.0 Resource Indicators (RFC 8707) and PKCE (RFC 7636).""" |
2 | 2 |
|
3 | | -import base64 |
4 | | -import hashlib |
5 | | -import secrets |
6 | | -import string |
7 | 3 | import time |
8 | 4 | from urllib.parse import urlparse, urlsplit, urlunsplit |
9 | 5 |
|
@@ -74,38 +70,6 @@ def check_resource_allowed(requested_resource: str, configured_resource: str) -> |
74 | 70 | return requested_path.startswith(configured_path) |
75 | 71 |
|
76 | 72 |
|
77 | | -def generate_pkce_parameters(verifier_length: int = 128) -> tuple[str, str]: |
78 | | - """Generate PKCE verifier and challenge per RFC 7636. |
79 | | -
|
80 | | - Generates cryptographically secure code_verifier and code_challenge |
81 | | - for OAuth 2.0 PKCE (Proof Key for Code Exchange). |
82 | | -
|
83 | | - Args: |
84 | | - verifier_length: Length of code_verifier (43-128 chars per RFC 7636, default 128) |
85 | | -
|
86 | | - Returns: |
87 | | - Tuple of (code_verifier, code_challenge) |
88 | | -
|
89 | | - Raises: |
90 | | - ValueError: If verifier_length is not between 43 and 128 |
91 | | - """ |
92 | | - if not 43 <= verifier_length <= 128: |
93 | | - raise ValueError("verifier_length must be between 43 and 128 per RFC 7636") # pragma: no cover |
94 | | - |
95 | | - # Generate code_verifier using unreserved characters per RFC 7636 Section 4.1 |
96 | | - # unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" |
97 | | - code_verifier = "".join( |
98 | | - secrets.choice(string.ascii_letters + string.digits + "-._~") for _ in range(verifier_length) |
99 | | - ) |
100 | | - |
101 | | - # Generate code_challenge using S256 method per RFC 7636 Section 4.2 |
102 | | - # code_challenge = BASE64URL(SHA256(ASCII(code_verifier))) |
103 | | - digest = hashlib.sha256(code_verifier.encode("ascii")).digest() |
104 | | - code_challenge = base64.urlsafe_b64encode(digest).decode("ascii").rstrip("=") |
105 | | - |
106 | | - return code_verifier, code_challenge |
107 | | - |
108 | | - |
109 | 73 | def calculate_token_expiry(expires_in: int | str | None) -> float | None: |
110 | 74 | """Calculate token expiry timestamp from expires_in seconds. |
111 | 75 |
|
|
0 commit comments