@authup/服务器-适应器-web
校验网络的 Authup 访问符 Request在任何框架内.
在框架的中间软件形状中,您将一个功能包入:Hono, routup, Bun. serve 或平面取取取处理器.
安装 • 妇女 使用量 • 妇女 API 密码 • 妇女 文档
为什么?
网上建立的框架 Request API各自都有自己的中间软件签名,因此每个框架的适配器都永远不会跟上. 这个包装了他们分享的部分: 从一个 Request,用 @authup/server-adapter-kit 并归还索赔。 存储结果的几行都是你的.
| 关切 | 没有它 | 用这个 |
|---|---|---|
| 页眉解析 | 分开 Bearer <token> 自己和处理错误的数值 | 为您解析; 错误的页眉扔出 |
| 核查 | 获取每个框架的密钥或调用回顾 | 一个 TokenVerifier本地或远程的,与其他运输工具共享 |
| 在信头外键入 | 手写 cookie 或查询回退 | tokenByRequest 没有时读取倒数 Authorization 发送信头 |
| 约束令牌 | 比较证书缩写 | certificateThumbprintByRequest 输入 RFC 8705 检查 |
安装
npm install @authup/server-adapter-web @authup/server-adapter-kit
TokenVerifier 来自 @authup/server-adapter-kit,直接导入。 这套方案只采用无害环境管理,没有同级依赖关系。 内容 engines 字段请求节点.js >=26.0.0; 核查包导入 node:crypto,所以另一个运行时间必须解决节点内置.
使用量
获取处理器
import { TokenVerifier } from '@authup/server-adapter-kit';
import { verifyRequest } from '@authup/server-adapter-web';
const tokenVerifier = new TokenVerifier({ baseURL: 'https://auth.example.com' });
export async function handle(request: Request): Promise<Response> {
let data;
try {
data = await verifyRequest(request, { tokenVerifier });
} catch {
return new Response('invalid token', { status: 401 });
}
if (!data) {
return new Response('unauthenticated', { status: 401 });
}
return new Response(`hello ${data.sub}`);
}
verifyRequest 解析核查数据,解析 undefined 当请求无任何迹象的时候 Authorization 标题或符号 核查者拒绝.
见 @authup/server-adapter-kit 用于本地对远程验证、缓存和权限.
交给你的处理者
import type { TokenVerificationData } from '@authup/server-adapter-kit';
type AuthedHandler = (request: Request, auth: TokenVerificationData) => Response | Promise<Response>;
function withAuth(handler: AuthedHandler) {
return async (request: Request): Promise<Response> => {
const auth = await verifyRequest(request, { tokenVerifier }).catch(() => undefined);
if (!auth) {
return new Response(null, { status: 401 });
}
return handler(request, auth);
};
}
export const orders = withAuth((_request, auth) => new Response(`orders of ${auth.sub}`));
索赔旅费作为论据,打过一次字,而不是附在索赔表上 Request在有其自身背景目标的框架内,通过框架的基础 Request (呼诺: c.req.raw),并将结果保存在这一背景下.
从别处读取代号
const data = await verifyRequest(request, {
tokenVerifier,
tokenByRequest: (req) => new URL(req.url).searchParams.get('access_token') ?? undefined,
});
tokenByRequest 只有在请求没有 Authorization 头曰. 其价值可能包括: Bearer 前缀或非前缀。 适配器自己不画饼干.
选项
| 选项 | 类型 | 默认 | 说明 |
|---|---|---|---|
tokenVerifier | ITokenVerifier | (必须) | 通常为: TokenVerifier 从 @authup/server-adapter-kit |
tokenByRequest | (request) => string | undefined | undefined | 没有后退符号源 Authorization 页眉已存在 |
certificateThumbprintByRequest | (request) => string | undefined | Promise<string | undefined> | undefined | 客户端证书的 SHA-256 拇指印, 用于印有证书的符号 |
API 密码
| 导出 | 仁爱 | 目的 |
|---|---|---|
verifyRequest | 函数 | 验证一个 Request |
VerifyRequestOptions | 类型 | 上面的选项对象 |
页:1
- 仅
Bearer在标题中被接受. A 类Basic或其他计划Authorization掷出BearerTokenMalformedError(单位:千美元)bearer_token_malformed),以及tokenByRequest未咨询. - 校验错误为
JWTError编号 (单位:千美元)invalid_token, (中文(简体) ),expired_token, (中文(简体) ),inactive_token) (中文(简体) ). 全部,以及畸形头,映射到HTTP 401. - 查询字符串符被代理登录 . 首页或饼干
tokenByRequest在你能够.
许可证
由 所制
现按 Apache 2.0 许可证。 。 。 .