Skip to main content

OAuth authentication from Jupyter notebooks for IAP-protected GCP services

Project description

tokentoss

PyPI version CI Python 3.10+ License: MIT

OAuth authentication from Jupyter notebooks for IAP-protected GCP services.

Features

  • anywidget with "Sign in with Google" button
  • Authorization Code flow with PKCE for security and refresh tokens
  • Token persistence across sessions
  • IAPClient for authenticated HTTP requests with auto-refresh

Installation

pip install tokentoss

Or with uv:

uv add tokentoss

Quick Start

1. One-Time GCP Setup

  1. Create a Desktop OAuth client in GCP Console
  2. Download client_secrets.json
  3. Add the Desktop client ID to your IAP's programmatic access allowlist
  4. Grant yourself the "IAP-secured Web App User" role

2. Configure Credentials

Use the ConfigureWidget for a password-safe setup (credentials never appear in notebook source):

from tokentoss import ConfigureWidget

display(ConfigureWidget())
# Enter Client ID and Client Secret, click "Configure"

Or configure programmatically:

import tokentoss

tokentoss.configure(client_id="YOUR_CLIENT_ID", client_secret="YOUR_SECRET")

Credentials are stored to ~/.config/tokentoss/client_secrets.json so they stay out of version control.

3. Authenticate in Jupyter

from tokentoss import GoogleAuthWidget

# Widget auto-discovers credentials from the standard config location
widget = GoogleAuthWidget()
display(widget)

# Click "Sign in with Google" and complete the flow
# Widget shows "Signed in as user@example.com"

4. Make Authenticated Requests

from tokentoss import IAPClient

# Create client (auto-discovers credentials)
client = IAPClient(base_url="https://my-iap-service.run.app")

# Make requests - ID token added automatically
data = client.get_json("/api/data")
response = client.post("/api/items", json={"name": "test"})

How It Works

  1. configure() stores OAuth client credentials to a standard platform location
  2. Widget opens a popup for Google OAuth
  3. User authenticates and grants consent
  4. AuthManager exchanges auth code for tokens (with PKCE)
  5. Tokens are stored securely (file permissions 0600)
  6. IAPClient uses ID token for IAP authentication
  7. Tokens refresh automatically when expired

Development

# Clone and install
git clone https://github.com/NicholasGrundl/tokentoss.git
cd tokentoss
uv sync --group dev

# Run tests
uv run pytest

# Lint and format
uv run ruff format src/ tests/
uv run ruff check src/ tests/

# Type check (advisory)
uv run ty check src/

# Start Jupyter for testing
uv run jupyter lab

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tokentoss-0.1.1.tar.gz (322.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tokentoss-0.1.1-py3-none-any.whl (26.2 kB view details)

Uploaded Python 3

File details

Details for the file tokentoss-0.1.1.tar.gz.

File metadata

  • Download URL: tokentoss-0.1.1.tar.gz
  • Upload date:
  • Size: 322.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for tokentoss-0.1.1.tar.gz
Algorithm Hash digest
SHA256 cc5c371d94fa3589642dcd85e84f07f497a697e63c16138ca876a10a2b28d92d
MD5 e7eb60f7cc52b3eb470ad85f79563bfd
BLAKE2b-256 0600de9fb1e95ba05fb907290d237dcda053abcbf8076fe52d5c4e52ec1c4e0f

See more details on using hashes here.

Provenance

The following attestation bundles were made for tokentoss-0.1.1.tar.gz:

Publisher: release.yml on NicholasGrundl/tokentoss

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file tokentoss-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: tokentoss-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 26.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for tokentoss-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 371e3e26162db6afdeed9e5f656dad150cdebb7b44d5bae59e73511ae62fc406
MD5 844c18ec4f7f7ecd6f08de51897e70af
BLAKE2b-256 9c3eb9ecc74a90ed765fdf11517f6465dfda3712dc06b2421fe61d5a2a5297a4

See more details on using hashes here.

Provenance

The following attestation bundles were made for tokentoss-0.1.1-py3-none-any.whl:

Publisher: release.yml on NicholasGrundl/tokentoss

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page