OAuth 2.0 for Requests¶
Requests is a very popular HTTP library for Python. Authlib enables OAuth 2.0
for Requests with its OAuth2Session and AssertionSession.
Requests OAuth 2.0¶
In OAuth 2 Session, there are many grant types, including:
Authorization Code Flow
Implicit Flow
Password Flow
Client Credentials Flow
And also, Authlib supports non Standard OAuth 2.0 providers via Compliance Fix.
Follow the common guide of OAuth 2 Session to find out how to use requests integration of OAuth 2.0 flow.
Using client_secret_jwt in Requests¶
There are three default client authentication methods defined for
OAuth2Session. But what if you want to use client_secret_jwt instead?
client_secret_jwt is defined in RFC7523, use it for Requests:
from authlib.integrations.requests_client import OAuth2Session
from authlib.oauth2.rfc7523 import ClientSecretJWT
token_endpoint = 'https://example.com/oauth/token'
session = OAuth2Session(
'your-client-id', 'your-client-secret',
token_endpoint_auth_method=ClientSecretJWT(token_endpoint),
)
session.fetch_token(token_endpoint)
The ClientSecretJWT is provided by RFC7523: JWT Profile for OAuth 2.0 Client Authentication and Authorization Grants.
Using private_key_jwt in Requests¶
What if you want to use private_key_jwt client authentication method,
here is the way with PrivateKeyJWT for Requests:
from authlib.integrations.requests_client import OAuth2Session
from authlib.oauth2.rfc7523 import PrivateKeyJWT
with open('your-private-key.pem', 'rb') as f:
private_key = f.read()
token_endpoint = 'https://example.com/oauth/token'
session = OAuth2Session(
'your-client-id', private_key,
token_endpoint_auth_method=PrivateKeyJWT(token_endpoint),
)
session.fetch_token(token_endpoint)
The PrivateKeyJWT is provided by RFC7523: JWT Profile for OAuth 2.0 Client Authentication and Authorization Grants.
OAuth2Auth¶
Already obtained access token? We can use OAuth2Auth directly in
requests. But this OAuth2Auth can not refresh token automatically for you.
Here is how to use it in requests:
token = {'token_type': 'bearer', 'access_token': '....', ...}
auth = OAuth2Auth(token)
requests.get(url, auth=auth)
Requests OpenID Connect¶
OpenID Connect is built on OAuth 2.0. It is pretty simple to communicate with
an OpenID Connect provider via Authlib. With Authlib built-in OAuth 2.0 system
and JsonWebToken (JWT), parsing OpenID Connect id_token could be very easy.
Understand how it works with OAuth 2 OpenID Connect.
Requests Service Account¶
The Assertion Framework of OAuth 2.0 Authorization Grants is also known as
service account. With the implementation of AssertionSession, we can
easily integrate with a “assertion” service.
Checking out an example of Google Service Account with AssertionSession.
Close Session Hint¶
Developers SHOULD close a Requests Session when the jobs are done. You
can call .close() manually, or use a with context to automatically
close the session:
session = OAuth2Session(client_id, client_secret)
session.get(url)
session.close()
with OAuth2Session(client_id, client_secret) as session:
session.get(url)
Self-Signed Certificate¶
Self-signed certificate mutual-TLS method internet standard is defined in RFC8705 Section 2.2 .
You can use the environment variables CURL_CA_BUNDLE and REQUESTS_CA_BUNDLE to specify a CA certificate file for validating your self-signed certificate.
REQUESTS_CA_BUNDLE=/path/to/ca-cert.pem
Please remember to set the env variable only in you development environment.