Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

NanoIDP

NanoIDP

Tests

A lightweight, configurable Identity Provider for development and testing.
Supports OAuth2/OIDC and SAML 2.0 protocols with a full-featured web UI for configuration.

📖 Documentation

Design principles, non-goals and medium-term direction live in VISION.md.

Features

  • OAuth2 / OIDC - OAuth2/OIDC support for development and integration testing: Authorization Code, Password, Client Credentials, Refresh Token, and Device Authorization grants
  • PKCE Support - Proof Key for Code Exchange (RFC 7636) with S256 and plain methods
  • Security Profiles - stricter-dev (runtime hardening) and oauth21 (draft OAuth 2.1 protocol strictness: PKCE-only S256, rotation, no password grant, registered redirect URIs)
  • Token Management - Introspection (RFC 7662) and Revocation (RFC 7009) endpoints
  • OIDC Logout - End Session endpoint for RP-initiated logout
  • Device Flow - Device Authorization Grant (RFC 8628) for CLI/IoT applications
  • SAML 2.0 - SSO and AttributeQuery endpoints with configurable signed assertions and opt-in verification of signed AuthnRequests
  • MCP Server - Model Context Protocol integration for Claude Code
  • Web UI - Full configuration interface for users, clients, settings, and more
  • Persona Login Mode - Passwordless interactive login: pick a configured user from a list instead of typing a password (login.mode: persona), opt-in and off by default, for quick local testing
  • YAML Configuration - File-based configuration, no database required
  • Attribute-based Access Control - Flexible authority prefixes and claims mapping
  • Audit Logging - Track all authentication events
  • Docker Support - Ready to deploy with Docker/Docker Compose

Quick Start

pip install nanoidp

python -m nanoidp init    # create ./config (users, settings, keys)
python -m nanoidp         # serve on http://localhost:8000

Get a first token:

curl -X POST 'http://localhost:8000/token' \
  -u 'demo-client:demo-secret' \
  -d 'grant_type=password&username=admin&password=admin&scope=openid'

The admin UI runs at http://localhost:8000. Prefer Docker?

docker run --rm -p 8000:8000 \
  -v $(pwd)/config:/app/config \
  ghcr.io/cdelmonte-zg/nanoidp:latest

Full walkthrough (wizard, custom config paths, docker-compose): Install and Quickstart.

Documentation

The full documentation lives at https://cdelmonte-zg.github.io/nanoidp/:

Security

NanoIDP is a development/testing tool and must NOT be used in production. Defaults favor convenience (plaintext passwords in config, permissive CORS, open redirects); hardening is opt-in via the stricter-dev (runtime) and oauth21 (draft OAuth 2.1 protocol strictness) profiles and explicit settings. The Security guide draws the line precisely.

Development

pip install -e ".[dev]"
pytest

See CONTRIBUTING.md for the development setup, the end-to-end test agent, code quality tooling, and the release process.

License

MIT License. See LICENSE for details.

❤️ Support NanoIDP

NanoIDP is maintained as an open-source project.

If it helps you test OAuth2, OpenID Connect, or SAML flows, you can support its development here:

Download files

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

Source Distribution

nanoidp-2.8.0rc1.tar.gz (170.8 kB view details)

Uploaded Source

Built Distribution

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

nanoidp-2.8.0rc1-py3-none-any.whl (200.4 kB view details)

Uploaded Python 3

File details

Details for the file nanoidp-2.8.0rc1.tar.gz.

File metadata

  • Download URL: nanoidp-2.8.0rc1.tar.gz
  • Upload date:
  • Size: 170.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for nanoidp-2.8.0rc1.tar.gz
Algorithm Hash digest
SHA256 74e8f0346164a71def7d84eab58df392f063668d98db9713ad42a282dc286342
MD5 576acfb91c1e32ec3b030f6ed4a5abd2
BLAKE2b-256 74df8ab29ff6f407b9b3f62e22f6059357edfda7a11772dfc758829c048d4b5e

See more details on using hashes here.

Provenance

The following attestation bundles were made for nanoidp-2.8.0rc1.tar.gz:

Publisher: publish.yml on cdelmonte-zg/nanoidp

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

File details

Details for the file nanoidp-2.8.0rc1-py3-none-any.whl.

File metadata

  • Download URL: nanoidp-2.8.0rc1-py3-none-any.whl
  • Upload date:
  • Size: 200.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for nanoidp-2.8.0rc1-py3-none-any.whl
Algorithm Hash digest
SHA256 f35b88796b3eb6b14840ec5b87211aa4bcb7144f22187e61fae46aff21f46669
MD5 4d7961352f88e6f72b94063b76c05574
BLAKE2b-256 273464b5ae2ba52a363de521604b6284ef27212bfd9143fa077cb7be49f9b640

See more details on using hashes here.

Provenance

The following attestation bundles were made for nanoidp-2.8.0rc1-py3-none-any.whl:

Publisher: publish.yml on cdelmonte-zg/nanoidp

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

Release history Release notifications | RSS feed

This release

2.8.0rc1 This release

2 files

2.7.0

2 files

2.6.0

2 files

2.5.0

2 files

2.4.0

2 files

2.3.0

2 files

2.2.0

2 files

2.1.0

2 files

2.0.0

2 files

1.4.0

2 files

1.3.3

2 files

1.3.2

2 files

1.3.1

2 files

1.3.0

2 files

1.2.3

2 files

1.2.2

2 files

1.2.1

2 files

1.2.0

2 files

1.1.1

2 files

1.1.0

2 files

1.0.0

2 files

Supported by

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