Metadata-Version: 2.4
Name: data-nexus-auth
Version: 0.2.0
Summary: Data Nexus signed context verification and FastAPI/ASGI middleware
Author: Data Nexus contributors
License-Expression: MIT
Project-URL: Source, https://github.com/bakazhou/data-nexus-api/tree/main/sdks/python
Keywords: data-nexus,authentication,asgi,fastapi
Classifier: Development Status :: 3 - Alpha
Classifier: Programming Language :: Python :: 3
Classifier: Operating System :: OS Independent
Requires-Python: >=3.9
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: cryptography<47,>=46
Provides-Extra: test
Requires-Dist: fastapi<1,>=0.115; extra == "test"
Requires-Dist: httpx<1,>=0.27; extra == "test"
Dynamic: license-file

# Python / FastAPI — SDK 0.2.0

适用 Python 3.9+、FastAPI/Starlette ASGI。先在平台 Settings → SDK integrations 注册服务并绑定 API，再配置平台 URL 和服务 ID。无需 API ID、Scope、密钥或下载 Token。

从源码安装（0.2.0 发布到 PyPI 后可用 pip install data-nexus-auth==0.2.0）：
```sh
pip install /path/to/data-nexus/sdks/python
```

```python
import os
from fastapi import FastAPI, Request
from data_nexus_auth.remote import RemoteDataNexusMiddleware

app = FastAPI()
app.add_middleware(
    RemoteDataNexusMiddleware,
    platform_url=os.environ["DATA_NEXUS_URL"],
    service_id=os.environ["DATA_NEXUS_SERVICE_ID"],
)

@app.get("/items/{item_id}")
async def get_item(item_id: str, request: Request):
    return {"id": item_id, "caller": request.state.data_nexus["client_id"]}
```

中间件保护整个 app 的 HTTP 路由，包括 docs/health；公开入口请独立隔离。ASGI server 须提供 raw_path。先校验 RSA 签名、服务 ID、过期时间和原始请求，再进入业务；保留原始 body，默认上限 1 MiB。业务权限仍由业务处理。

可在启动前用 RemoteConfig(platform_url, service_id).refresh() 检查公钥连通性；中间件首次请求自动加载。只支持 HTTPS，本地隔离测试可传 allow_insecure_http=True。

需要自行管理可信公钥时，可使用 DataNexusMiddleware(keys=public_jwk_array, service_id="inventory-service")，或 verify_context(headers, keys, service_id, method, raw_path_with_query, raw_body_bytes)。公钥来源须可信，不能从当前请求获取。InvalidContext 转为 403。

示例：设置 DATA_NEXUS_URL / DATA_NEXUS_SERVICE_ID，安装 fastapi uvicorn 后在本目录运行 uvicorn example:app --port 8080。安装开发依赖后运行 python -m unittest discover -s sdks/python -p 'test_*.py' -v。

完整边界见 [协议](../README.md)和[自动拉取](../REMOTE.md)。0.2.0 不兼容旧 HMAC 参数。
