REUSABLE AUTH BOUNDARY · PYTHON

为 Python 网站接入登录。

ChatLogin 组合可信身份、凭据校验、短期会话、CSRF 与可替换 UI。它是宿主应用里的库,不是一套共享身份中心。

公开演示身份:demo / chatlogin-demo · 无业务权限 · 5 分钟内存会话 · 不连接真实账号或数据库

CAPABILITY MAP

先选后端,再独立选择前端

色板和布局是视觉配置,不是新的认证方式。

01

账户 / 凭据后端

PasswordBackend
CallbackBackend
AsyncCallbackBackend
ChatVoiceAuth

已实现:显式账号、宿主回调与精确旧 schema。
02

前端接入

LoginUI
宿主 template / renderer
ui=None headless

三种模式都调用同一真实 HTTP 安全契约。
03

会话存储

MemorySessionStore
SQLiteSessionStore
宿主 SessionStore

这是存储维度,不是认证协议。
04

授权边界

current_user
csrf_user
roles / require_owner

业务资源策略继续由宿主明确负责。

LIVE LOGIN LAB

四种真实后端,一份公开合成身份

每张卡进入独立 cookie 与 session namespace;回调和 ChatVoice schema 都只存在于本进程。

QUICK INTEGRATION

FastAPI 默认 UI:完整最小应用

安装 ChatLogin[web] 和宿主 ASGI server;下面的程序只从环境变量读取宿主显式设置的密码,没有默认生产凭据。

"""Minimal host app; provide an explicit password through the environment."""
import os
from urllib.parse import urlsplit

from fastapi import Depends, FastAPI
import uvicorn
from chatlogin import MemorySessionStore, PasswordBackend, Principal, SessionManager, hash_password
from chatlogin.fastapi import CookieSettings, FastAPIAuth
from chatlogin.ui import LoginUI

origin = os.environ.get("MY_SITE_ORIGIN", "http://127.0.0.1:8000")
password = os.environ["MY_SITE_LOGIN_PASSWORD"]
backend = PasswordBackend({
    "operator": (Principal("operator", "Operator"), hash_password(password)),
})
app = FastAPI()
auth = FastAPIAuth(
    backend,
    SessionManager(MemorySessionStore(max_sessions=256), instance="my-site", ttl=3600),
    origin=origin,
    ui=LoginUI(),
    cookie=CookieSettings(secure=urlsplit(origin).scheme == "https"),
)
app.include_router(auth.router)

@app.get("/")
def home():
    return {"login": "/auth/?next=/private"}

@app.get("/private")
def private(user=Depends(auth.current_user)):
    return user.as_dict()

if __name__ == "__main__":
    uvicorn.run(app, host="127.0.0.1", port=8000, proxy_headers=False)

HONEST BOUNDARIES

演示站不是生产登录微服务

它没有默认生产凭据,不读取 ChatEnv profile,不信任 forwarded headers,也不提供 OAuth、SSO、MFA、邮件、短信或扫码登录。生产宿主必须选择自己的后端、持久 store、固定 origin、TLS 与业务授权。