OAuthlib authentication support for Requests.
—
Pre-built compliance fixes for popular OAuth providers that implement non-standard OAuth behaviors. These fixes enable seamless integration with services that deviate from the OAuth 2.0 specification.
Handles Facebook's non-standard OAuth 2.0 implementation that returns tokens as URL-encoded form data with incorrect content-type headers instead of JSON.
def facebook_compliance_fix(session: OAuth2Session) -> OAuth2Session:
"""
Apply Facebook-specific OAuth compliance fixes.
Fixes:
- Handles text/plain content-type for token responses
- Converts 'expires' field to standard 'expires_in' field
- Adds missing 'token_type': 'Bearer' to token response
- Converts response to proper JSON format
Args:
session (OAuth2Session): OAuth session to modify
Returns:
OAuth2Session: Modified session with Facebook compliance fixes
"""Usage Example:
from requests_oauthlib import OAuth2Session
from requests_oauthlib.compliance_fixes import facebook_compliance_fix
# Create session and apply Facebook fixes
oauth = OAuth2Session('client_id', redirect_uri='https://example.com/callback')
oauth = facebook_compliance_fix(oauth)
# Now works with Facebook's non-standard responses
auth_url, state = oauth.authorization_url('https://www.facebook.com/dialog/oauth')
token = oauth.fetch_token(
'https://graph.facebook.com/oauth/access_token',
authorization_response=callback_url,
client_secret='client_secret'
)Handles Slack's non-standard parameter name for access tokens in API requests.
def slack_compliance_fix(session: OAuth2Session) -> OAuth2Session:
"""
Apply Slack-specific OAuth compliance fixes.
Fixes:
- Uses 'token' parameter instead of standard Authorization header
- Automatically adds token to request data or URL parameters
- Preserves existing token parameter if already present
Args:
session (OAuth2Session): OAuth session to modify
Returns:
OAuth2Session: Modified session with Slack compliance fixes
"""Usage Example:
from requests_oauthlib import OAuth2Session
from requests_oauthlib.compliance_fixes import slack_compliance_fix
# Create session and apply Slack fixes
oauth = OAuth2Session('client_id', redirect_uri='https://example.com/callback')
oauth = slack_compliance_fix(oauth)
# Token automatically added as 'token' parameter
auth_url, state = oauth.authorization_url('https://slack.com/oauth/authorize')
token = oauth.fetch_token(
'https://slack.com/api/oauth.access',
authorization_response=callback_url,
client_secret='client_secret'
)
# API calls automatically include token parameter
response = oauth.post('https://slack.com/api/chat.postMessage', data={
'channel': '#general',
'text': 'Hello from OAuth!'
})Handles Instagram's token response format variations.
def instagram_compliance_fix(session: OAuth2Session) -> OAuth2Session:
"""
Apply Instagram-specific OAuth compliance fixes.
Args:
session (OAuth2Session): OAuth session to modify
Returns:
OAuth2Session: Modified session with Instagram compliance fixes
"""Handles Mailchimp's OAuth implementation specifics.
def mailchimp_compliance_fix(session: OAuth2Session) -> OAuth2Session:
"""
Apply Mailchimp-specific OAuth compliance fixes.
Args:
session (OAuth2Session): OAuth session to modify
Returns:
OAuth2Session: Modified session with Mailchimp compliance fixes
"""Handles Fitbit's OAuth implementation requirements.
def fitbit_compliance_fix(session: OAuth2Session) -> OAuth2Session:
"""
Apply Fitbit-specific OAuth compliance fixes.
Args:
session (OAuth2Session): OAuth session to modify
Returns:
OAuth2Session: Modified session with Fitbit compliance fixes
"""Handles Weibo's OAuth implementation variations.
def weibo_compliance_fix(session: OAuth2Session) -> OAuth2Session:
"""
Apply Weibo-specific OAuth compliance fixes.
Args:
session (OAuth2Session): OAuth session to modify
Returns:
OAuth2Session: Modified session with Weibo compliance fixes
"""Handles PlentyMarkets OAuth implementation specifics.
def plentymarkets_compliance_fix(session: OAuth2Session) -> OAuth2Session:
"""
Apply PlentyMarkets-specific OAuth compliance fixes.
Args:
session (OAuth2Session): OAuth session to modify
Returns:
OAuth2Session: Modified session with PlentyMarkets compliance fixes
"""Handles eBay's OAuth implementation requirements.
def ebay_compliance_fix(session: OAuth2Session) -> OAuth2Session:
"""
Apply eBay-specific OAuth compliance fixes.
Args:
session (OAuth2Session): OAuth session to modify
Returns:
OAuth2Session: Modified session with eBay compliance fixes
"""Compliance fixes modify OAuth2Session behavior by registering custom hooks that intercept and modify requests and responses. They typically:
session.register_compliance_hook()token_type or use non-standard field namesYou can create custom compliance fixes for other providers:
def custom_provider_compliance_fix(session):
def fix_token_response(response):
# Modify response as needed
if 'custom_token_field' in response.text:
# Transform response to standard format
pass
return response
def fix_protected_request(url, headers, data):
# Modify request parameters as needed
if session.access_token:
# Add token in provider-specific way
pass
return url, headers, data
# Register hooks
session.register_compliance_hook('access_token_response', fix_token_response)
session.register_compliance_hook('protected_request', fix_protected_request)
return sessionCompliance fixes can register hooks for different points in the OAuth flow:
Install with Tessl CLI
npx tessl i tessl/pypi-requests-oauthlib