组件世界 WidgetStore

开发者接入「用组件世界登录」(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日