开源项目将 Auth0 和 AI Agent 集成构建健康伴侣应用,展示了认证与 AI 能力的实用结合。
Auth0 for AI Agents 挑战赛投稿
这是我对 Auth0 for AI Agents 挑战赛的投稿。
MedHack 是一个 AI 驱动的健康协助平台,旨在让任何人都能获取基础医学指导和个性化营养规划——尤其是在专业医疗资源难以获得、费用昂贵或令人困惑的环境中。
该应用有两个核心 AI agents:
MedScan 诊断 Agent 该 agent 分析医学影像,如 X 光、CT 扫描、MRI,甚至皮疹或可见伤口的照片。它帮助用户在就医前理解身体可能发生的情况。它不替代医学专家——它只是提供早期的清晰认知,减少焦虑,帮助用户在寻求治疗时提出更好的问题。
饮食规划 Agent 这个 agent 不是生成通用的饮食表,而是进行交互式操作。它询问年龄、活动量、偏好、医学状况、日常作息,甚至预算。然后它会生成一份个性化的每周饮食计划,包含热量目标、营养成分分解、购物清单和持续的基于对话的调整。该结构化计划可以下载为 PDF 或直接通过邮件发送给用户。
在线演示:https://med-hack.vercel.app/ Github 仓库:https://github.com/kris70lesgo/Medhack
观看视频查看 medhack 的在线演示
登陆页面/主页 AI 驱动的个人健康助手,结合诊断 + 营养规划
MedScan 用户上传 X 光、皮肤图像或医学报告进行分析。
饮食规划 用户提供年龄、体重、饮食偏好、医学状况和目标。
智能对话屏幕 Agent 提出澄清问题以精确定制计划。
7 天饮食计划预览 完整的、结构化的 7 天饮食计划即时生成
PDF 下载 计划可以安全地下载为格式化 PDF
邮件集成 最终计划也通过邮件发送以方便使用
Auth0 角色和操作 基于角色的访问区分免费和高级功能访问。自动化的角色分配确保顺畅安全的入职流程
现在的医疗保健指导存在碎片化和效率低下的问题:
结果是,许多人最终会:
MedHack 在一个平台上提供即时、个性化、可行的健康指导。
输入你的年龄、体重、生活方式习惯、预算和目标
agent 提出后续问题以了解你的真实日常作息
生成定制的 7 天饮食计划:
计划可以立即下载为 PDF 或通过邮件发送
这确保该应用能够负责任和安全地扩展。
MedHack 处理个人医学数据,因此安全和受控的访问至关重要。我集成了 Auth0 for AI Agents 来处理身份验证、授权和工具访问权限。
用户使用 Auth0 的托管登录页面登录。在 middleware.ts 中,我保护私有路由:
// middleware.ts
import { auth0 } from "@auth0/nextjs-auth0";
export default auth0.withMiddlewareAuthRequired();
这确保只有经过身份验证的用户才能访问仪表板、饮食规划或 MedScan 功能。
| 角色 | 访问权限 |
|---|---|
| free_user | 基础 MedScan + 简单饮食建议 |
| pro_user | 完整饮食生成器、详细扫描推理、PDF + 邮件导出 |
角色在 Auth0 仪表板中分配(或当用户升级时通过 Actions 分配)。
代码中定义的角色(auth0-fga.ts)
export const roles = {
FREE_USER: {
name: 'free_user',
permissions: [
"use:vision_agent",
"read:health_data"
]
},
PRO_USER: {
name: 'pro_user',
permissions: [
"use:vision_agent",
"use:diet_agent",
"read:health_data",
"write:health_data",
"export:pdf",
"send:email"
]
}
};
我添加了一个 Auth0 登录后 Action,使用户令牌包含权限:
exports.onExecutePostLogin = async (event, api) => {
const namespace = "https://medhack.ai";
const role = event.authorization?.roles?.[0] ?? "free_user";
const permissions = role === "pro_user"
? roles.PRO_USER.permissions
: roles.FREE_USER.permissions;
api.idToken.setCustomClaim(`${namespace}/permissions`, permissions);
api.accessToken.setCustomClaim(`${namespace}/permissions`, permissions);
};
在运行任何 agent 或 API 调用前,我验证权限。
// lib/authorization.ts
import { auth0 } from "@auth0/nextjs-auth0";
export async function withAuthorization(requiredPermission: string) {
const session = await auth0.getSession();
const userPermissions = session?.user?.["https://medhack.ai/permissions"] ?? [];
if (!userPermissions.includes(requiredPermission)) {
throw new Error(`Forbidden: Missing Permission → ${requiredPermission}`);
}
}
使用示例(保护饮食 Agent API):
// app/api/agents/diet/route.ts
import { withAuthorization } from "@/lib/authorization";
export async function POST(request: Request) {
await withAuthorization("use:diet_agent");
// ...run AI agent logic
}
✅ 免费用户无法调用饮食 agent。✅ 专业用户可以。
当 agents 调用外部 API(OCR、视觉、食品营养搜索、邮件发送)时,我使用 Auth0 令牌保险库,所以:
import { getAccessToken } from "@auth0/nextjs-auth0";
const { accessToken } = await getAccessToken({
scopes: ["send:email", "export:pdf"]
});
每个用户只能访问他们自己生成的计划和扫描:
export function canAccessResource(resourceOwnerId: string, currentUserId: string) {
return resourceOwnerId === currentUserId;
}
✅ 没有人可以查看或下载其他人的医学计划或扫描。这在功能上类似于 Auth0 细粒度授权(FGA)模式。MedHack 是安全、可扩展的,并准备好安全部署到公网。
💭 开发回顾
问题:Qwen2.5-VL-72B 在生产中失败(404:免费层找不到模型) 解决方案:实施自动回退系统,包含 3 个模型(Gemini → Claude → Llama) 学习:在部署前始终研究模型可用性;先在本地测试
问题:错过了 JWT 自定义声明的命名空间要求(声明未出现在令牌中)
解决方案:在 Auth0 Action 中添加命名空间:api.idToken.setCustomClaim(${namespace}/permissions, ...)
学习:身份验证应该首先设计,而不是后来改装
问题:最初在 localStorage 中检查权限(用户可以伪造) 解决方案:将所有权限检查移至后端,通过 JWT 自定义声明验证 学习:永远不要相信客户端安全性;后端必须验证每个请求
问题:API 密钥跨用户共享(无法追踪使用或撤销访问) 解决方案:创建 TokenVault 类以按用户隔离密钥,在访问前验证所有权 学习:从第一天开始考虑数据所有权;每个资源都需要一个所有者
问题:cookies().get() 在 v14 中有效,但在 v15 中失败(必须是 awaited) 解决方案:更新所有 cookie 访问:(await cookies()).get('demo_role') 学习:现代框架快速演进;仔细阅读发布说明
问题:单个模型失败 = 500 错误;没有优雅降级 解决方案:通过 try-catch 循环尝试 3 个模型;有意义的错误消息;详细的日志记录 学习:韧性胜过简洁;总是有备用方案
问题:Med Scan 在本地有效,但在生产中失败(未定义的 API 密钥) 解决方案:创建 /api/debug/env 端点来诊断问题;在部署前添加所有变量 学习:尽早创建诊断端点;没有可见性无法调试生产环境
✅ Auth0 集成比预期简单 ✅ 细粒度授权规模扩展得很好 ✅ 全面的错误处理改进了 UX ✅ 清晰的代码组织实现了快速开发 ✅ AI 回退消除了停机时间 ✅ 安全的令牌保险库防止密钥泄露
挑战:7 个主要挑战已解决
尝试的模型:3 种方法
权限:3 个角色中定义的 10 个
安全层:7 个(身份验证、授权、令牌保险库、审计日志等)
代码行数:~3,000+
生产问题:1 个(env 变量)- 用调试端点在 30 分钟内修复
伟大的产品是在以下交集处构建的:
最好的学习来自于挑战。每个问题都教会了我一些使我成为更好开发者的东西。
如果我能给出一个建议:"将安全和韧性构建到基础中。尽早创建诊断工具。测试完整流程。记住:如果你能看到发生了什么,你可以调试任何东西。"
MedHack 证明,通过适当的架构、周到的安全性和弹性系统,你可以快速构建令人印象深刻的 AI 应用程序。
某些评论可能仅对已登录访问者可见。登录以查看所有评论。
如需进一步行动,你可以考虑屏蔽该用户和/或举报滥用。