@ frontmcp/ auth (中文(简体) )
FrontMCP服务器的认证和授权:五台 auth 模式, OAuth 2.1 以 FrontMCP 作为它自己的授权服务器或者在您的身份提供者JSON Web Token(JWT)和会话检查,工具访问规则,以及内置的签名页面前登录. @frontmcp/sdk 取决于此软件包, 因此一个 FrontMCP 服务器已经拥有它, 您通过配置它 @FrontMcp({ auth })自己安装它只是为了导入 SDK 不再出口的东西 比如 escapeHtml 用于自定义签名页面或 AuthorityDeniedError。 。 。 .
安装
FrontMCP服务器不需要这个步骤: @frontmcp/sdk 安装 @frontmcp/auth。直接从中导入:
npm install @frontmcp/auth
使用同样的版本 @frontmcp/sdk它需要节点24或以后.
| 同伴依赖关系 | 需求 | 是为了什么 |
|---|---|---|
@frontmcp/lazy-zod | 对 | 选择计划. @frontmcp/sdk 已经带来了,它需要 zod 4.四. |
ioredis | 没有 | 重新支持的商店 : tokenStorage: { redis } 内 local 财务报告和审定财务报表 remote 模式, RedisSessionStore还有其他. |
@vercel/kv | 没有 | VercelKvSessionStore。 。 。 . |
@frontmcp/storage-sqlite | 没有 | tokenStorage: { sqlite }。 。 。 . |
使用量
设定 auth 打开 @FrontMcp;其方案来自这个包. 在此用户在您的身份提供者签名, FrontMCP 发布 MCP 客户端发送的符:
import { FrontMcp } from '@frontmcp/sdk';
import { DeskApp } from './desk.app';
@FrontMcp({
info: { name: 'desk', version: '1.0.0' },
apps: [DeskApp],
auth: {
mode: 'remote',
provider: 'https://idp.example.com',
clientId: 'desk-mcp',
clientSecret: process.env.IDP_CLIENT_SECRET,
scopes: ['openid', 'profile', 'email'],
},
})
export default class Server {}
在生产中 JWT_SECRET:FrontMCP用它来标出其标志. 远程代理 列出每个选项,并列出要在您的提供者注册的回调 URL. mode 这是:
mode | 谁进来 |
|---|---|
'public' | 诸人. 默认. |
'static' | 请求发送你的钥匙. |
'transparent' | 由您的身份提供者签署有效的JWT申请. |
'local' | 在FrontMCP自己的页面上签名的用户. |
'remote' | 用户通过FrontMCP在您的身份提供者注册. |
直接从软件包导入
单位 local 模式, login.render 替换登录页面。 FrontMCP不会逃避你打印的东西, 所以传递每一个值通过 escapeHtml数字 :
import { escapeHtml } from '@frontmcp/auth';
import { FrontMcp } from '@frontmcp/sdk';
import { DeskApp } from './desk.app';
@FrontMcp({
info: { name: 'desk', version: '1.0.0' },
apps: [DeskApp],
auth: {
mode: 'local',
login: {
fields: { deskKey: { type: 'password', label: 'Desk key', required: true } },
render: (ctx) => `<!doctype html>
<html lang="en">
<body>
<p>${escapeHtml(ctx.clientName)} wants to connect to your desk.</p>
${ctx.error ? `<p role="alert">${escapeHtml(ctx.error)}</p>` : ''}
<form method="POST" action="${escapeHtml(ctx.callbackPath)}">
<input type="hidden" name="pending_auth_id" value="${escapeHtml(ctx.pendingAuthId)}">
<label>Desk key <input type="password" name="deskKey" required></label>
<button>Sign in</button>
</form>
</body>
</html>`,
},
authenticate: async ({ fields }) =>
fields.deskKey === process.env.DESK_KEY
? { ok: true, sub: 'operator' }
: { ok: false, message: 'Unknown desk key' },
},
})
export default class Server {}
里面有什么东西
- Auth 模式数字 :
authOptionsSchema和每个模式的选项类型。 见 Auth 模式。 。 。 . - 本地模式:FrontMCP作为OAuth 2.1授权服务器,拥有PKCE(代码交换的Proof密钥),动态客户端注册和刷新令牌. 见 本地认证。 。 。 .
- 远程模式: 用户在您的身份提供者签名, FrontMCP 发布符. 见 远程代理。 。 。 .
- 上游供应商: 几个 OAuth 供应商在一个登录、一个拾取页面或每个页面一个供应商中链接(
incrementalAuth.showAllAppsAtOnce: false, (中文(简体) ),buildFederatedStepPage) (中文(简体) ). 见 上游供应商。 。 。 . - 打开检查:JWT对照JSON网络密钥集(JWKS)进行核查,并检查受众和范围(
JwksService, (中文(简体) ),validateAudience) (中文(简体) ). 见 接头和会议。 。 。 . - CIMD( 身份识别元数据文档)客户:
client_id是元数据文档的 URL(CimdService) (中文(简体) ). 公开客户端声明token_endpoint_auth_method: 'none'; 机密声明private_key_jwt并用客户端的密钥签名的客户端认证jwks编号 :jwks_uri(RFC 7523,CimdService.verifyClientAssertion) (中文(简体) ). 见 客户身份元数据。 。 。 . - 当局:关于工具,资源,提示,技巧和代理的规则,从角色,权限,符号要求,调用参数或你自己的代码(
AuthorityDeniedError) (中文(简体) ). 见 当局。 。 。 . - 证书金库: 工具读取的每个用户证书
this.credentials,用户可以添加到会中。 见 渐进认证。 。 。 . - 登录页面:内置的签名、同意和出错页,以及
escapeHtml, (中文(简体) ),buildLoginPage财务报告和审定财务报表baseLayout为了你自己 见 自定义登录 UI。 。 。 . - 存储:内存,Redis,Vercel KV和SQLite商店用于会话,授权代码和令牌,并加密了秘密存储(
EncryptedTypedStorage, (中文(简体) ),TokenVault) (中文(简体) ). 见 本地认证存储。 。 。 .
文档
- 认证和授权:概述,以及哪一页涵盖哪些任务
- 生产代理: 秘密、 HTTPS、 象征性支票和若干实例
this.auth:从工具内部呼叫谁- 认证客户端 财务报告和审定财务报表 授权通话:分步骤指南
- 测试认证
相关软件包
@frontmcp/sdk: 框架。 它运行此包并再导出其选项类型 .@frontmcp/utils:密码(PKCE,加密,密钥衍生)和存储适配器 此软件包所基于的.@frontmcp/ui数字 :@frontmcp/ui/auth,用于设定的对应签名页面auth.ui。 。 。 .@frontmcp/testing:指使工厂和模拟OAuth服务器进行测试.
捐款
资料来源: libs/auth欢迎提出问题和拉动请求;见 捐款额。 。 。 .
许可证
阿帕奇2.0 (英语). 见 自由主义。 。 。 .