快速开始
签发 user_token
给产品侧 client 一个可以调用 City 的用户凭证。
user_token 由 Federation 在可信流程中签发。开发者后端使用 FederationAdmin,基于 bureau_id + user_id 请求 Federation 签发 token。
import { FederationAdmin } from "@downcity/federation/legacy";
const admin = new FederationAdmin({
base_url: "https://base.example.com",
credential: administrator_session_token,
});
const user = await admin.service("accounts").action("tokens/issue").invoke({
bureau_id: "demo",
user_id: "user_123",
metadata: {
plan: "pro",
},
ttl: "7d",
});把 user.user_token 返回给产品 client。bureau_id 已写入 Token,普通 service 请求不再重复传入。
metadata 的作用
metadata 可以把套餐、组织 ID 等业务信息带进 hook。
const action = service.action("generate", async (ctx) => {
return generateSomething(ctx.input);
});
action.before(async (ctx) => {
await quotaService.check({
bureau_id: ctx.bureau?.bureau_id,
user_id: ctx.user?.user_id,
plan: ctx.user?.metadata?.plan,
});
});这样多个 client 可以共享一套鉴权和限额判断。