File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 77import base64
88import hashlib
99import logging
10+ import re
1011import secrets
1112import string
1213import time
3334logger = logging .getLogger (__name__ )
3435
3536
37+ def _extract_resource_metadata_from_www_auth (header_value : str ) -> str | None :
38+ """
39+ Parse WWW-Authenticate header to extract resource_metadata parameter.
40+
41+ According to RFC9728, the header format is:
42+ WWW-Authenticate: Bearer resource_metadata="https://example.com/.well-known/oauth-protected-resource"
43+
44+ Returns the resource_metadata URL if found, None otherwise.
45+ """
46+ if not header_value :
47+ return None
48+
49+ # Look for resource_metadata parameter in the header
50+ # Pattern matches: resource_metadata="url" or resource_metadata=url (unquoted)
51+ pattern = r'resource_metadata=(?:"([^"]+)"|([^\s,]+))'
52+ match = re .search (pattern , header_value )
53+
54+ if match :
55+ # Return quoted value if present, otherwise unquoted value
56+ return match .group (1 ) or match .group (2 )
57+
58+ return None
59+
60+
3661class OAuthFlowError (Exception ):
3762 """Base exception for OAuth flow errors."""
3863
You can’t perform that action at this time.
0 commit comments