Auth0快取-API SDK是一个用于保护API在快取应用中的库.
文档
开始
1. 安装SDK
npm i @auth0/auth0-fastify-api
这个库需要Node.js 20 LTS和较新的LTS版本.
3. 为 API 注册 Auth0 快捷插件
将 Auth0 与 Fastify 实例一起注册为 API 的快取插件 .
import fastifyAuth0Api from '@auth0/auth0-fastify-api';
const fastify = Fastify({
logger: true,
});
fastify.register(fastifyAuth0Api, {
domain: '<AUTH0_DOMAIN>',
audience: '<AUTH0_AUDIENCE>',
});
这个 AUTH0_DOMAIN 可从 Auth0 剪贴板 一旦你创造了API.
这个 AUTH0_AUDIENCE 是正在调用的 API 的标识符。 您可以在 Auth0 仪表板的 API 部分中找到这个 .
保护 API 路由
为了保护 API 路径, 您可以使用 SDK 的 requireAuth() 前汉德勒中的方法 :
fastify.register(() => {
fastify.get(
'/protected-api',
{
preHandler: fastify.requireAuth(),
},
async (request: FastifyRequest, reply) => {
return `Hello, ${request.user.sub}`;
}
);
});
SDK将从信使中提取的债权暴露为 user 财产 FastifyRequest 对象.
为了使用自定义用户类型来代表自定义要求,您可以配置 Token 模块中类型 :
declare module '@auth0/auth0-fastify-api' {
interface Token {
id: number;
name: string;
age: number;
}
}
这样做将更改用户类型 FastifyRequest 自动对象 :
fastify.register(() => {
fastify.get(
'/protected-api',
{
preHandler: fastify.requireAuth(),
},
async (request: FastifyRequest, reply) => {
return `Hello, ${request.user.name}`;
}
);
});
[大
以上是用无记名符号保护API路由,而不是使用会话保护服务器侧渲染路由.
DPoP( 证明 )
DPoP将访问令牌绑定在一个特定的客户端的密钥对上,防止被窃取的令牌被攻击者重放. SDK以三种模式支持DPop:
allowed(默认) : 接受 Bearer 和 DPop 绑定符 .required:仅接受DPoP捆绑的活字符号;拒绝熊克活字符号.disabled: DPoP被忽略; 仅以熊为主的行为.
import fastifyAuth0Api from '@auth0/auth0-fastify-api';
const fastify = Fastify({ logger: true });
fastify.register(fastifyAuth0Api, {
domain: '<AUTH0_DOMAIN>',
audience: '<AUTH0_AUDIENCE>',
dpop: { mode: 'required' },
});
当 DPOP 启用时,客户端发送 :
- 一个
Authorization: DPoP <access_token>页眉( 代替Bearer) (中文(简体) ). - A 类
DPoP包含与请求方法和 URL 绑定的 JWT 证据的头条 .
SDK 自动从请求中取出 DPop 证明, 并对照访问符验证它 cnf.jkt ,并核实证明与当前 HTTP 方法和 URL 匹配.
关于完整的配置参考文献和错误处理细节,参见 EXAMPLES.md中的DPOP部分。 。 。 .
顶端交换
使用 fastify.auth0Client.getTokenOnBehalfOf() 当您快速化 API 需要代表同一用户调用下游 API时,例如在 MCP 服务器中. 该方法在保留用户身份的同时,将所接收到的访问令牌换成被放入下游API范围的新信使.
getTokenOnBehalfOf() 需要保密客户。 注册插件为 clientId 财务报告和审定财务报表 clientSecret (或 clientAssertionSigningKey 用于客户断言认证).
import fastifyAuth0Api from '@auth0/auth0-fastify-api';
const fastify = Fastify({ logger: true });
fastify.register(fastifyAuth0Api, {
domain: '<AUTH0_DOMAIN>',
audience: '<AUTH0_AUDIENCE>',
clientId: '<AUTH0_CLIENT_ID>',
clientSecret: '<AUTH0_CLIENT_SECRET>',
});
fastify.register(() => {
fastify.post(
'/schedule-meeting',
{
preHandler: fastify.requireAuth(),
},
async (request: FastifyRequest) => {
// request.getToken() returns the raw JWT without the `Bearer ` prefix.
const obo = await fastify.auth0Client!.getTokenOnBehalfOf(request.getToken()!, {
audience: 'https://calendar-api.example.com',
scope: 'calendar:read calendar:write',
});
const response = await fetch('https://calendar-api.example.com/meetings', {
method: 'POST',
headers: { authorization: `Bearer ${obo.accessToken}` },
body: JSON.stringify(request.body),
});
return response.json();
}
);
});
关于包括处理出错、行为索赔检查和下游核查员模式在内的全程通行情况,请参见 顶端交换 节 缩略语.md。 。 。 .
反馈
捐款
我们赞赏反馈和对这次再投资的贡献! 在开始前,请阅读以下内容:
提出问题
请提供反馈或报告错误 提出我们的问题追踪器。 。 。 .
脆弱性报告
请不要在公共 GitHub 问题跟踪器上报告安全漏洞 。 这个 负责任的披露程序 详细说明披露安全问题的程序.
什么是奥特?
Auth0是一个易于执行,可适应的认证和授权平台. 学习更多退房 为什么是Auth0?
这个项目根据麻省理工学院的许可证获得许可。 见 自由主义 需要更多信息的文件.