IWish Auth开发者文档
V1 Alpha GitHub

快速开始

完成第一个业务 App 的统一登录与权限接入

在 10 分钟内完成一个服务端业务 App 的统一登录、组织上下文和权限检查。开始前,管理员需要先注册 App、同步 Manifest 并创建 confidential OAuth client。

前端项目不能独立完成 IWish Auth 接入。授权码交换、client secret 和 App session 必须在服务端处理。

1. 选择技术栈

技术栈推荐入口完整示例
Next.js App Router@iwish/auth-sdk/nextexamples/nextjs-app
Express / Node.js@iwish/auth-sdk/expressExpress 接入指南
FastAPI / Pythoniwish_auth.fastapiexamples/fastapi-app

2. 安装固定版本 JavaScript 制品

npm install --save-exact https://auth-docs-staging.iwishapp.cn/packages/iwish-auth-sdk-0.2.0.tgz
npm install --save-dev --save-exact https://auth-docs-staging.iwishapp.cn/packages/iwish-auth-cli-0.2.0.tgz

/packages/index.json/packages/SHA256SUMS 核对版本与 SHA256。必须提交 lockfile,禁止 workspace:file:link: 或 Auth 仓库路径依赖。

3. 准备 App 和 Manifest

在业务 App 根目录创建 auth.manifest.json

{
  "$schema": "https://auth-docs-staging.iwishapp.cn/auth-manifest.schema.json",
  "schemaVersion": "1.0",
  "appKey": "reporting",
  "name": "数据报表",
  "environment": "dev",
  "manifestVersion": "2026.07.20-1",
  "permissions": [
    { "key": "reporting.access", "name": "访问数据报表" },
    { "key": "reporting.report.read", "name": "查看报表" }
  ],
  "roles": [
    { "key": "reporting.viewer", "name": "报表查看者", "permissions": ["reporting.access", "reporting.report.read"] }
  ]
}

本地校验:

npx iwish-auth manifest validate ./auth.manifest.json --environment dev

管理员确认预检差异后同步:

$env:IWISH_AUTH_API_URL='http://127.0.0.1:8788'
$env:IWISH_AUTH_ADMIN_ORGANIZATION_ID='<internal-organization-id>'
$env:IWISH_AUTH_ADMIN_TOKEN='<temporary-admin-token>'
npx iwish-auth manifest sync ./auth.manifest.json --yes

3. 配置服务端环境变量

OAuth client 由 IWish Auth 管理员创建。clientSecret 只显示一次,必须写入业务 App 的服务端 secret 管理,不得使用 NEXT_PUBLIC_* 或提交到 Git。

IWISH_AUTH_API_URL=http://127.0.0.1:8788
IWISH_AUTH_PORTAL_URL=http://localhost:3035
IWISH_AUTH_APP_KEY=reporting
IWISH_AUTH_CLIENT_ID=iwish_replace_with_real_client
IWISH_AUTH_CLIENT_SECRET=iwish_secret_replace_with_real_secret
IWISH_AUTH_REDIRECT_URI=http://localhost:3000/auth/callback

IWISH_AUTH_REDIRECT_URI 必须与 OAuth client 中登记的 callback 完全一致,包括协议、端口、路径和尾部斜杠。

4. 安装 SDK

Next.js 或 Express:

pnpm add @iwish/auth-sdk

FastAPI:

pip install "iwish-auth[fastapi]"

5. 接入登录和权限

Next.js 服务端配置:

import { createIWishAuth } from "@iwish/auth-sdk/next";

export const auth = createIWishAuth({
  apiUrl: process.env.IWISH_AUTH_API_URL!,
  portalUrl: process.env.IWISH_AUTH_PORTAL_URL!,
  appKey: process.env.IWISH_AUTH_APP_KEY!,
  clientId: process.env.IWISH_AUTH_CLIENT_ID!,
  clientSecret: process.env.IWISH_AUTH_CLIENT_SECRET!,
  redirectUri: process.env.IWISH_AUTH_REDIRECT_URI!
});

保护业务 API:

export async function GET(request: Request) {
  const session = await auth.requirePermission(request, "reporting.report.read");
  return Response.json({
    user: session.user,
    organization: session.organization,
    clientAssignments: session.clientAssignments
  });
}

6. 完成验收

必须验证以下路径:

  1. 未登录访问受保护接口返回 401。
  2. 登录后 callback 能建立 HttpOnly App session。
  3. 未分配 App 角色时返回 403。
  4. 分配 reporting.viewer 后可以读取报表。
  5. 使用其他 App 的 session 访问当前 App 被拒绝。
  6. 登出后原 session 不再可用。
  7. clientAssignments 缺失或为空时,业务 App 仍按权限正常工作。

下一步阅读对应的框架指南接入 Checklist