This library (built on top of Google's official SDK) aims to provide features not implemented by the standard library for whatever reason.
Common reason is that the latter is not a priority in the SDK's roadmap.
I hope that the features available in this repo will be integrated in the official library for the common good.
For security reasons, this project will always drop support for a python version as soon as security support ends.
As an example, the version 2.16.1 of google-auth
launched on 2023-02-17 still supports python3.61.
google-auth-plugins
requires Python 3.7 or newer, and can be installed directly via pip
:
python3 -m venv venv && source venv/bin/activate
python -m pip install google-auth-plugins
A bit of context
As stated in this issue currently it's not possible to produce a delegated credentials via an impersonated identity.
To put it another way, today the only way to obtain those credentials is with a service account key 🤯.
Given the importance of this kind of service accounts it seems relevant to limit as much as possible long-term credentials in order to protect against leaks.
Domain-wide delegation credentials allows that.
Please find below an example:
import google.auth
from google_auth_plugins import dwd_credentials
target_scopes = ['https://www.googleapis.com/auth/calendar.readonly']
subject = "john.doe@pamplemousse.com"
# The impersonated service account must grant `Service Account Token Creator` to the identity represented by source_credentials
source_credentials, _ = google.auth.default()
delegated_credentials = dwd_credentials.Credentials(
subject=subject,
source_credentials=source_credentials,
target_principal='dwd-impersonated-account@_project_.iam.gserviceaccount.com',
target_scopes = target_scopes,
)
Alternatively, if source_credentials
is the service account with domain-wide delegation, you can skip target_principal definition.
source_credentials, _ = google.auth.default()
delegated_credentials = dwd_credentials.Credentials(
subject=subject,
source_credentials=source_credentials,
target_scopes = target_scopes,
)
Finally, you can switch delegated credentials as defined below:
alice_delegated_creds = dwd_credentials.Credentials(
subject="alice@example.com",
source_credentials=source_credentials,
target_scopes = target_scopes,
)
bob_delegated_creds = alice_delegated_creds.with_subject("bob@example.com")
Note: this module is heavily inspired by Johannes Passing blog post 🚀.
make test