IWish Auth开发者文档
V1 Alpha GitHub

FastAPI

使用 Python SDK 和依赖注入接入

FastAPI 使用 iwish_auth.fastapi.IWishFastAPIAuth。Adapter 提供登录、callback、登出和依赖注入,并将 SDK 稳定错误转换为 HTTP 状态。

1. 配置 Adapter

import os
from iwish_auth.fastapi import IWishFastAPIAuth, IWishFastAPIAuthOptions

auth = IWishFastAPIAuth(IWishFastAPIAuthOptions(
    api_url=os.environ["IWISH_AUTH_API_URL"],
    portal_url=os.environ["IWISH_AUTH_PORTAL_URL"],
    app_key=os.environ["IWISH_AUTH_APP_KEY"],
    client_id=os.environ["IWISH_AUTH_CLIENT_ID"],
    client_secret=os.environ["IWISH_AUTH_CLIENT_SECRET"],
    redirect_uri=os.environ["IWISH_AUTH_REDIRECT_URI"],
))

client_secret 只能从服务端环境或 secret manager 读取。

2. 登录、Callback 和登出

from fastapi import FastAPI, Request

app = FastAPI()

@app.get("/auth/login")
async def login(request: Request, return_to: str = "/"):
    return await auth.login(request, return_to=return_to)

@app.get("/auth/callback")
async def callback(request: Request):
    return await auth.callback(request)

@app.post("/auth/logout")
async def logout(request: Request):
    return await auth.logout(request)

3. 保护接口

from fastapi import Depends

@app.get("/api/reports")
async def reports(
    session=Depends(auth.require_permission("reporting.report.read")),
):
    return {
        "user": session["user"],
        "organization": session["organization"],
        "clientAssignments": session.get("clientAssignments", []),
    }

可用依赖:

  • auth.require_auth:要求有效 App session。
  • auth.require_app_access:同时确认 session 属于当前 App。
  • auth.require_organization:返回当前授权域。
  • auth.require_permission(permission):检查 App scoped permission。
  • auth.get_client_assignments:返回当前有效项目分工。

4. 直接使用 Python Client

后台任务或非 FastAPI 服务可以直接使用异步 Client:

from iwish_auth import IWishAuthClient

async with IWishAuthClient(
    api_url=IWISH_AUTH_API_URL,
    token=app_session_token,
) as client:
    session = await client.get_app_session()
    decision = await client.check_permission("reporting.report.read")

Client 使用短 TTL session 缓存,且缓存有效期不会超过 Auth session 的 expiresAt

5. 错误映射

SDK 错误HTTP业务处理
IWishAuthUnauthorizedError401清理本 App cookie 并重新登录
IWishAuthForbiddenError403展示无权限,不循环登录
IWishAuthError原始状态记录稳定错误码和 request id

6. 测试

FastAPI TestClienthttpx.AsyncClient 测试至少覆盖:登录 302、callback state、session cookie、允许权限、缺少权限、跨 App 权限和登出。完整实现见 examples/fastapi-app