You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Web App认证下FastAPI+Chainlit获取用户ID方案求助

解决方案:适配本地/线上的用户ID获取方案

针对你的FastAPI+Chainlit应用,结合Azure Web App身份认证的场景,以下是能同时支持本地开发和线上部署的简单实现方案:

1. 先解决Azure线上环境的401问题

之前尝试从请求头拿X-MS-CLIENT-PRINCIPAL-ID返回401,核心原因是Azure Web App身份验证的默认设置拦截了未认证请求,没有把用户身份头转发给你的后端。

先修改Azure Web App的身份认证配置:

  • 进入Azure门户的Web App资源 → 身份验证 → 设置
  • 将「未经身份验证的请求」改为允许(转发身份验证头),而不是默认的「拒绝」
  • 保存设置后,Azure会将已登录用户的身份信息通过请求头转发给你的后端,而不是直接拦截请求

2. 后端(FastAPI)实现用户ID接口

通过环境变量区分本地/线上环境,分别返回模拟/真实用户ID:

from fastapi import FastAPI, Request, HTTPException
import os

app = FastAPI()

# 提供给前端获取用户ID的接口
@app.get("/api/user/me")
async def get_current_user(request: Request):
    # 线上环境:从Azure转发的请求头获取真实用户ID
    if os.getenv("AZURE_WEBAPP_ENVIRONMENT"):
        user_id = request.headers.get("X-MS-CLIENT-PRINCIPAL-ID")
        if not user_id:
            raise HTTPException(status_code=401, detail="用户未完成认证")
        return {"user_id": user_id}
    # 本地环境:返回模拟用户ID,可通过环境变量自定义
    else:
        mock_user_id = os.getenv("LOCAL_MOCK_USER_ID", "local_dev_user_001")
        return {"user_id": mock_user_id}

3. 前端(Chainlit)获取用户ID

因为前端已挂载到后端,直接调用后端的/api/user/me接口即可,无需单独使用MSAL:

import chainlit as cl
import requests
import os

@cl.on_chat_start
async def init_user_context():
    try:
        # 前端挂载在后端,直接用相对路径请求接口
        resp = requests.get("/api/user/me")
        resp.raise_for_status()
        user_info = resp.json()
        user_id = user_info["user_id"]
        
        # 将用户ID存入Chainlit会话,后续操作直接取用
        cl.user_session.set("user_id", user_id)
        
        # 示例:创建用户专属存储目录
        user_dir = f"./user_storage/{user_id}"
        os.makedirs(user_dir, exist_ok=True)
        
        await cl.Message(content=f"已加载用户专属环境,用户ID:{user_id}").send()
    except Exception as e:
        await cl.Message(content=f"初始化用户环境失败:{str(e)}").send()

4. 本地开发配置

  • 启动FastAPI前,可设置环境变量LOCAL_MOCK_USER_ID来模拟不同用户(比如export LOCAL_MOCK_USER_ID="test_user_002"),方便测试多用户场景
  • 本地无需配置Azure身份认证,直接启动应用即可使用模拟用户ID

方案优势

  • 无需在应用内实现登录逻辑,完全复用Azure Web App的身份认证能力
  • 一套代码适配本地开发和线上部署,无需额外分支
  • 前后端通过统一接口获取用户ID,保证一致性

内容的提问来源于stack exchange,提问作者Obiii

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 20:22:26