@easyweb/认证
共享Easyweb微服务认证原始——无国籍的JWT中件, 请求文本中间软件,以及符号验证工具服务.
附带到 @easyweb/events 页:1
通讯,和 @easyweb/errors 页:1
hTTP 错误分类.
2.1.0. —— SUPER_ADMIN 现在满足 authorize(["ADMIN"])
authorize() 是一个精确的字符串匹配。 平台上的每个管理员路线都会被写入
authorize(["ADMIN"])认证服务 admin-seed.ts 授予拖曳符操作员
SUPER_ADMIN 默认 —— 因此种子账户无法调用单个管理路径
{\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}这个平台.
SUPER_ADMIN 现在暗示 ADMIN没有任何其它意义: ADMIN 蓄意
已经 没有 隐含 USER因为那边缘会无声地拓宽每一个未来的顾客
前往工作人员的路线.
增加,只扩大. 仍然在2.0.0的服务 表现得和它一样
SUPER_ADMIN 仅仅被锁在那里——所以这不需要协调部署。 自兹
每个服务声明 ^2.0.0 但从一个锁文件安装,用:
npm i @easyweb/authentication@^2.1.0
新的 effectiveRoles(roles) 导出对自己的服务进行同样的扩展
守护(特别是Auth-service的DB后置中件).
现状不变: authorize() 还投出 NotAuthorizedError,这是 401 (中文(简体) )
即使是一个签了名的来电 角色不对 每个服务是http套接字.
需要从"不允许"中告诉"未签入"的来电者必须检查角色本身.
升级到 2. 0. 0 — 断裂
错误类已移动到 @easyweb/errors。错误处理是交叉的,并且
与JWTs无关;服务需要 ConflictError 不必依赖
它的认证包.
- import { NotAuthorizedError } from "@easyweb/authentication";
+ import { NotAuthorizedError } from "@easyweb/errors";
@easyweb/errors 是一个 依赖性 - 和这个包一起安装 不要让
它最后被窝在地上 node_modules/@easyweb/authentication/: 两份
CustomError 表示 instanceof 跨越边界失败, 错误处理器会回答
500块,每分每分 每分每分 每分每分每分每分每分每分每分 每分每分每分每分每分 每分每分每分每分每分每分 每分每分每分每分每分每分每分每分每分 每分每分每分每分每分每分每分每分每分每分每分 每分每分每分每分每分每分每分每分每分每分500 校验 npm ls @easyweb/errors。 。 。 .
2.0.0中也是新的: extractToken 财务报告和审定财务报表 isValidAccessPayload 用于服务
保存自己的DB后置中件(见下文),否则将复制.
安装
npm install @easyweb/authentication
express@^5 财务报告和审定财务报表 jsonwebtoken@^9 是同伴的依赖关系——消费服务
提供他们.
使用量
包里没有写 process.env。在启动时,配置会被绑定,所以
软件包从不到达服务 config 模块.
import express from "express";
import cookieParser from "cookie-parser";
import { createAuthMiddleware, requestContext } from "@easyweb/authentication";
import config from "./config";
const app = express();
app.use(cookieParser()); // required: the middleware reads the accessToken cookie
app.use(requestContext);
const authMiddleware = createAuthMiddleware(config.jwt);
// config.jwt must supply { secret, issuer, audience } matching auth-service's
app.get("/me", authMiddleware.authenticate, (req, res) => {
res.json(req.user); // { id, email, username, roles, permissions }
});
app.get("/feed", authMiddleware.optionalAuth, (req, res) => {
res.json({ personalised: Boolean(req.user) });
});
app.delete(
"/admin/:id",
authMiddleware.authenticate,
authMiddleware.authorize(["admin"]),
handler,
);
嵌入符( 只有自动服务) :
import { createJwtSigner } from "@easyweb/authentication";
const signAccessToken = createJwtSigner(config.jwt);
// config.jwt additionally needs accessTokenTtlSeconds
它所证实的,和所没有的
authenticate 实值 无国籍人它检查签名、签发人、受众、过期日期和
有效载荷是一个完善的进入标志。 它没有进行数据库查询.
在认证服务中注销或会话, 此处将隐蔽, 直至访问令牌
期满JWT_ACCESS_TOKEN_TTL_SECONDS页:1 如果需要立即提供服务
撤销,它必须保留自己的DB后置中件——认证服务就是这样做的.
req.user.permissions 总是 []。访问符上没有 permissions 索赔;
author-service根据请求时间解决自己的表格中的内容。 守护此阵列
将拒绝每一个请求.
出口
| 导出 | 目的 |
|---|---|
createAuthMiddleware(config) | { authenticate, optionalAuth, authorize } |
requestContext | 传播/生成 x-request-id |
createJwtVerifier(config) | (token) => JwtAccessPayload,丢入无效 |
createJwtSigner(config) | (claims) => string |
extractToken(req) | 熊头头,然后 accessToken 饼干 |
isValidAccessPayload(decoded) | 类型后卫: 这是很好的形状吗 访问 标志? |
effectiveRoles(roles) | 通过影响图(2.1.0)扩展的所起作用 |
effectiveRoles(roles) | 通过影响图(2.1.0)扩展的所起作用 |
JwtAccessPayload, (中文(简体) ), JwtAccessClaims, (中文(简体) ), JwtVerifyConfig, (中文(简体) ), JwtSignConfig | 类型 |
extractToken 财务报告和审定财务报表 isValidAccessPayload 用于必须保持 DB 支持的服务
中间软件。 他们以前是私人的,所以Auth-service复制了他们—— 和副本
漂来漂去. 如果您需要使用不同错误消息的相同的检查, 请导入这些
而不是重新执行它们.
导入软件包也增加了 Express.Request 与 user, (中文(简体) ), auth,以及
requestId。删除任何本地副本 declare global 块或类型脚本
报告重复成员.
托肯合同
JwtAccessPayload 是服务所商定的唯一的形状。 改变它打破每一个
消费者——撞倒了主要版本.
许可证
麻省理工学院