理解 Downcity City
token 模型
admin_secret_key 和 user_token 如何配合。
Downcity 使用 admin_secret_key 管理 City,并使用 user_token 让终端 client 调用 service。
可信后端你的后端使用 Admin City,并持有
admin_secret_key。创建 town / 申请 user_tokenDowncity校验
admin_secret_key,签发 user_token,并在内部保存 provider key。终端 client前端、扩展或 App 只拿
user_token + town_id,使用 User City 调 service。拿不到 admin_secret_keyuser_token
user_token 是给终端用户或产品 client 使用的调用凭证。它由 Admin City 基于 town_id + user_id 向 City 申请。
town_iduser_idmetadatattl
client 只携带 user_token 和 town_id,不接触 provider key,也不接触 admin_secret_key。
admin_secret_key
DOWNCITY_CITY_ADMIN_SECRET_KEY 用于管理 City:创建 town、管理 env、为某个 town 下的用户签发 user_token。City 首次启动时会自动生成并写入 .env。
const client = new City({
role: "admin",
city_url: "https://base.example.com",
admin_secret_key: process.env.DOWNCITY_CITY_ADMIN_SECRET_KEY,
});
const town = await client.towns.create({
name: "Chrome Extension",
});多产品复用
多个 client 可以归属同一个 town。签发 token 时明确写入 town_id:
const user = await client.towns.tokens.apply({
town_id: town.town_id,
user_id: "user_123",
metadata: {
plan: "pro",
},
ttl: "7d",
});
console.log(user.user_token);