Metadata-Version: 2.4
Name: data-nexus-auth
Version: 0.1.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
Provides-Extra: test
Requires-Dist: fastapi<1,>=0.115; extra == "test"
Requires-Dist: httpx<1,>=0.27; extra == "test"
Dynamic: license-file

# Python / FastAPI

推荐使用 `data_nexus_auth.remote.RemoteDataNexusMiddleware`：只配置 `config_url` 和 SDK 专用 `token`，按请求拉取和刷新所绑定 API 的配置。正常每 60 秒刷新、缓存最多 300 秒，默认仅 HTTPS，配置不可用时拒绝请求。管理员在 Settings → SDK integrations 管理 API 分组与 token；完整接入见仓库 `sdks/REMOTE.md`。下面的静态配置方式仍可用。

安装（在业务项目虚拟环境中，将路径改为本仓库实际路径）：

```sh
pip install /path/to/data-nexus/sdks/python
```

注册一次；作用于此 FastAPI app 的所有 HTTP 路由，包括 docs/health。需要公开端点时使用独立 app/服务，不要给受保护路由配置绕过名单。

```python
import os
from fastapi import FastAPI, Request
from data_nexus_auth import DataNexusMiddleware

app = FastAPI()
app.add_middleware(
    DataNexusMiddleware,
    secret=os.environ["DATA_NEXUS_INTEGRATION_KEY"],
    api_id=os.environ["DATA_NEXUS_API_ID"],
    scope=os.environ["DATA_NEXUS_SCOPE"],
)

@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"]}
```

纯验签函数也可独立使用：

```python
from data_nexus_auth import verify_context, InvalidContext
context = verify_context(headers, secret, api_id, scope, method,
                         raw_path_with_query, raw_body_bytes)
```

`InvalidContext` 应转为 403。必须使用原始路径和 body。SDK 默认限流式读取 body 至 1 MiB，但不提供请求速率限制；吞吐和总并发限制由应用/代理负责。ASGI server 必须提供 `raw_path`，缺失时拒绝。

运行完整示例：设置三个环境变量，安装 `fastapi uvicorn` 后在本目录运行 `uvicorn example:app --port 8080`。示例不访问真实业务数据。

打包：`python -m build /path/to/data-nexus/sdks/python`（先安装 build）。公仓发布配置见 [PUBLISHING.md](../PUBLISHING.md)。尚未发布；正式发布后可用 `pip install data-nexus-auth==0.1.0` 安装。详见[统一协议与验收](../README.md)。
