IWish Auth开发者文档
V1 Alpha GitHub

Express

使用统一中间件保护 Node.js API

Express 接入

Express Adapter 负责解析 IWish Auth App Session 和恢复统一身份。业务 App 必须在其后连接自己的成员与授权 middleware。

import { createIWishExpressAuth } from "@iwish/auth-sdk/express";

const iwishAuth = createIWishExpressAuth({
  apiUrl: process.env.IWISH_AUTH_API_URL!,
  appKey: "reporting",
  cookieName: "iwish_reporting_session"
});

app.get(
  "/api/reports",
  iwishAuth.requireAuth(),
  iwishAuth.requireAppAccess(),
  requireLocalMember(),
  requireLocalPermission("report.read"),
  async (request, response) => {
    const session = request.iwishAuth!.context;
    response.json(await loadReports({
      iwishAuthUserId: session.user.id,
      clientAssignments: session.clientAssignments
    }));
  }
);

requireAuth() 从 Bearer token 或 HttpOnly Cookie 读取 opaque token并调用 /v1/sso/sessionrequireAppAccess() 确认 sessionVersion=0.3authorizationDomain=application、session 的 appKey 与当前服务配置一致,并拒绝已失效的统一身份。requireLocalMemberrequireLocalPermission 是业务 App 自己实现的 middleware,不属于 IWish Auth SDK。

建议在 Request 类型中扩展两组字段:request.iwishAuth 保存统一身份和上下文;request.appMember 保存本地成员、角色和计算后的数据范围。不要把二者合成一个不透明布尔值,否则无法正确处理员工离职、本地角色撤销和项目分工变化。

旧版 iwishAuth.requirePermission() 只返回 410 application_owned_authorization,用于暴露未完成迁移的代码路径。不得捕获该错误后放行,也不得降级到 x-role、邮箱或前端声明角色。

错误策略:401 可引导登录;Auth 403 表示统一身份或 App 生命周期无效;本地成员不存在、停用、无角色或权限不足返回业务 App 自己的 403;Auth 网络异常与解析异常默认拒绝并记录 request ID。对高风险写操作,每次请求都重新执行本地授权和数据范围检查。