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.0.tar.gz (329.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.0-py3-none-any.whl (26.2 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: tokentoss-0.1.0.tar.gz
  • Upload date:
  • Size: 329.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.0.tar.gz
Algorithm Hash digest
SHA256 46bc244e35d2c21399526c64f843fdafc8e8bfe06cb865578e2c574d2de0828e
MD5 f75007fabfac01ab7fee3ed7d362c360
BLAKE2b-256 064256fea1c5190ba5287952f6dcec589801bd1ecb9bb9cff3eae5869ecf38c1

See more details on using hashes here.

Provenance

The following attestation bundles were made for tokentoss-0.1.0.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.0-py3-none-any.whl.

File metadata

  • Download URL: tokentoss-0.1.0-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.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6a46727cdd81e834f58815c8df5b6d4e22a77e615545ed370bf6dbbff086f53b
MD5 3724cddb36409d018f2c303d9743642c
BLAKE2b-256 26069cafb623542cfe5f5ec24c0edf7ae063a717b4470ef5f3880655b8c25caa

See more details on using hashes here.

Provenance

The following attestation bundles were made for tokentoss-0.1.0-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