開發者接入「用組件世界登入」(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日