开发者接入「用组件世界登录」(OAuth 2.1 / OpenID Connect)
用标准的 OAuth 2.1 和 OpenID Connect 给你的应用加上「用组件世界登录」:创建应用、PKCE、用 JWKS 验证 ES256 的 ID token,以及按用户允许的范围调用 API。
任何人都可以在 开发者控制台 创建应用,让用户用组件世界账号登录。已经登录组件世界的用户只要点「允许」。能看到什么由用户决定,用户也可以随时在 账户中心 → 应用与 API 断开你的应用。
1. 创建应用
在 /developers 点「新建应用」,填写:
- 名称、图标、主页和隐私政策地址(必填)。用户会在授权页看到。
- 回调地址,每行一个,必须完全一致:不支持通配符,多一个斜杠、换一个参数都不行。只能用 https;原生应用还可以用环回地址(
http://127.0.0.1/...,端口不限)或自定义 scheme。 - 应用类型:「服务端应用」有 client secret(只显示一次,库里只存哈希);「浏览器 / 原生应用」没有 secret。
免费版可以创建 3 个应用,Pro 10 个。新应用会显示「未验证」,审核前最多 100 个用户。
2. 跳转授权
GET https://widgetstore.net/oauth/authorize
?response_type=code
&client_id=wsc_...
&redirect_uri=https://example.com/auth/callback
&scope=openid profile email
&state=<随机>
&nonce=<随机>
&code_challenge=<BASE64URL(SHA256(verifier))>
&code_challenge_method=S256
- 所有应用都必须用 PKCE(S256),服务端应用也一样。
- 回来时核对
state没变(防 CSRF),我们也会带上iss。 prompt=none静默检查:用户已登录且同意过就直接给 code,否则返回login_required/consent_required;prompt=consent一定显示授权页。
3. 换取令牌
POST https://widgetstore.net/widget/api/oauth/token
Content-Type: application/x-www-form-urlencoded
Authorization: Basic base64(client_id:client_secret) # 只有服务端应用
grant_type=authorization_code&code=...&code_verifier=...&redirect_uri=...
返回 access_token(1 小时)、refresh_token(每次使用都会换新,旧的再用会作废整个授权)和 id_token。code 只能用一次,10 分钟过期。
4. 验证 ID token
- ES256 签名,公钥在
https://widgetstore.net/widget/api/oauth/jwks(按kid取)。 - 核对
iss=https://widgetstore.net、aud= 你的 client ID、exp,以及nonce一致。 sub只对你的应用唯一:同一个人在另一个应用里是另一个sub,应用之间无法关联同一个人。- 声明按用户允许的范围给:
profile→name、picture;email→email、email_verified。
发现文档:https://widgetstore.net/.well-known/openid-configuration。用户信息:带 access token 请求 GET https://widgetstore.net/widget/api/oauth/userinfo。
范围
| 范围 | 能拿到 |
|---|---|
openid | 登录必选 |
profile | 昵称和头像 |
email | 已验证的邮箱 |
read、write:* | 通过 开放 API 与 MCP 读写用户的组件、主页和数据 |
规则
- 只要需要的范围,用户可以去掉
profile和email。 - 不要向用户索要组件世界的密码或邮箱验证码。
- 用户在你的应用里退出时撤销令牌:
POST https://widgetstore.net/widget/api/oauth/revoke。 - 误导用户或滥用数据的应用会被停用:停用后不能再授权,也不能刷新令牌。
最后更新:2026年11月14日