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.7.0rc5.tar.gz (158.1 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.7.0rc5-py3-none-any.whl (186.7 kB view details)

Uploaded Python 3

File details

Details for the file nanoidp-2.7.0rc5.tar.gz.

File metadata

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

File hashes

Hashes for nanoidp-2.7.0rc5.tar.gz
Algorithm Hash digest
SHA256 fd1046c79a2810b544e1701f596e91f502ea1214b8516ca62ff7c6b8c55d6a91
MD5 da8a8fdadf9b6f6becd0319208f0316b
BLAKE2b-256 ed8568547dfc74c507e61760eb5530049929a760c14f98e281d2067a614f9888

See more details on using hashes here.

Provenance

The following attestation bundles were made for nanoidp-2.7.0rc5.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.7.0rc5-py3-none-any.whl.

File metadata

  • Download URL: nanoidp-2.7.0rc5-py3-none-any.whl
  • Upload date:
  • Size: 186.7 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.7.0rc5-py3-none-any.whl
Algorithm Hash digest
SHA256 3a96cd2d5092f1f5c9d78bd4c1a1bcb879b16d412d946814a0445d4a2c5032de
MD5 51ae442e8b247130c2c68c979aa6eda0
BLAKE2b-256 65b7b79fcde4858db9ece9cd5d3e192d0a4d4556e9577e6a727ce9db52bc763e

See more details on using hashes here.

Provenance

The following attestation bundles were made for nanoidp-2.7.0rc5-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

2.7.0

2 files

This release

2.7.0rc5 This release

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