hanzoai-iam
Identity and Access Management SDK for the Hanzo ecosystem. Built on Casdoor with organization-aware multi-tenancy.
The PyPI distribution is hanzoai-iam; the import path is hanzo_iam.
Installation
pip install hanzoai-iam
With FastAPI integration:
pip install hanzoai-iam[fastapi]
With KMS support for certificate management:
pip install hanzoai-iam[kms]
Quick Start
from hanzo_iam import IAMClient, IAMConfig
config = IAMConfig(
endpoint="https://iam.hanzo.ai",
client_id="your-client-id",
client_secret="your-client-secret",
org_name="HANZO",
)
client = IAMClient(config)
# Get authorization URL for user login
auth_url = client.get_auth_url(redirect_uri="https://yourapp.com/callback")
# Exchange code for tokens
tokens = client.get_token(code="auth-code-from-callback")
# Get user info
user = client.get_user_info(access_token=tokens.access_token)
Organizations
| Organization | Endpoint | Description |
|---|---|---|
| HANZO | https://iam.hanzo.ai | Hanzo AI platform |
| ZOO | https://iam.zoo.dev | Zoo Labs Foundation |
| LUX | https://iam.lux.network | Lux blockchain network |
| PARS | https://iam.pars.dev | Pars development platform |
Environment Variables
One canonical prefix — IAM_*. No upstream-brand aliases, no per-org variants.
# Required
IAM_ENDPOINT=https://hanzo.id
IAM_CLIENT_ID=your-client-id
IAM_CLIENT_SECRET=your-client-secret
# Optional (defaults shown)
IAM_ORG=hanzo
IAM_APP=app
IAM_CERT=path/to/cert.pem # PEM file or inline PEM content
FastAPI Integration
from fastapi import FastAPI, Depends
from hanzo_iam.fastapi import IAMAuth, get_current_user
from hanzo_iam import IAMConfig, User
app = FastAPI()
config = IAMConfig.from_env()
auth = IAMAuth(config)
@app.get("/protected")
async def protected_route(user: User = Depends(auth.require_user)):
return {"user": user.name, "org": user.owner}
@app.get("/optional")
async def optional_auth(user: User | None = Depends(auth.optional_user)):
if user:
return {"message": f"Hello, {user.name}"}
return {"message": "Hello, anonymous"}
Client Credentials Flow
For service-to-service authentication:
from hanzo_iam import IAMClient, IAMConfig
config = IAMConfig(
endpoint="https://iam.hanzo.ai",
client_id="service-client-id",
client_secret="service-client-secret",
org_name="HANZO",
)
client = IAMClient(config)
# Get service token
tokens = client.get_client_credentials_token()
# Use token for API calls
headers = {"Authorization": f"Bearer {tokens.access_token}"}
Async Client
import asyncio
from hanzo_iam import AsyncIAMClient, IAMConfig
async def main():
config = IAMConfig.from_env()
client = AsyncIAMClient(config)
# All methods are async
tokens = await client.get_client_credentials_token()
user = await client.get_user_info(tokens.access_token)
print(f"Authenticated as: {user.name}")
asyncio.run(main())
API Reference
| Method | Description |
|---|---|
get_auth_url(redirect_uri, state, scope) |
Generate OAuth authorization URL |
get_token(code) |
Exchange authorization code for tokens |
refresh_token(refresh_token) |
Refresh access token |
get_client_credentials_token() |
Get token via client credentials flow |
get_user_info(access_token) |
Get user info from access token |
parse_jwt(token) |
Parse and validate JWT claims |
get_user(user_id) |
Get user by ID |
get_users() |
List all users in organization |
create_user(user) |
Create new user |
update_user(user) |
Update existing user |
delete_user(user_id) |
Delete user |
get_organizations() |
List organizations |
get_organization(name) |
Get organization by name |
License
Apache-2.0
Metadata
Release files for hanzoai-iam 1.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| hanzoai_iam-1.1.2.tar.gz | 18.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| hanzoai_iam-1.1.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 39.0 kB
Release files / hanzoai_iam-1.1.2.tar.gz
| Download URL | hanzoai_iam-1.1.2.tar.gz |
|---|---|
| Size | 18.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8800f4b4610f562ff7c6d1bf31bf26c6c3597eb37b3c386851e9ca4e5698994f
|
|
BLAKE2b-256 checksum How to use checksums |
9bac7d0e9b2d11dcf1d9428d230df8aa615bacbd1da7a01c33f41bde35309563
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.12
|
Release files / hanzoai_iam-1.1.2-py3-none-any.whl
| Download URL | hanzoai_iam-1.1.2-py3-none-any.whl |
|---|---|
| Size | 20.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
0359db2679203c88cf3d41d271bf4233dc3bb6177d57377b1468a28e613b7387
|
|
BLAKE2b-256 checksum How to use checksums |
dfa9663960ccb2aa2b40ceb25d69801a86fad074d6f2ef48f958157406fdd1a3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.12
|