File tree Expand file tree Collapse file tree 1 file changed +25
-0
lines changed
Expand file tree Collapse file tree 1 file changed +25
-0
lines changed 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