權限與同意 開發人員
上次更新:2026年8月16日
權限與同意
使用者在通行帳戶同意頁中看到的權限,取決於你在開發者入口網站中設定的必選 / 選用 scope、強制權限的理由與隱私權政策,以及授權請求實際申請的 scope(伺服器端會按入口網站登記合併,見下文「舊用戶端相容」)。
2026-08-11 平台更新:權限可編輯、強制權限須填理由與隱私權政策、每次登入須明確確認授權。詳見同目錄「更新」下的《2026-08-11 權限與同意平台更新》。
相容提示
- 已上線的舊用戶端無需因本次平台更新而改程式碼或重新發布。 入口網站改權限、每次登入進入授權確認頁,均由通行帳戶側處理。
- 新接入或新開發的用戶端請以本文件及同目錄最新指南為準(按入口網站登記申請
scope、為強制權限準備理由與隱私權政策連結,並按「每次都會出現授權確認頁」設計登入 UX;不要依賴靜默略過授權頁)。
開發原則
不能用單個 profile 一次拿走全部個人資訊。基本資料按欄位拆成多個 scope,使用者可在同意頁分別勾選或拒絕選用項。
- 授權請求若仍使用歷史寫法
scope=openid profile …,伺服器端會把profile展開為下列細項後再展示同意頁。 - 權杖中的
scope反映使用者最終勾選的細項(以及openid/email等),而不再依賴整包profile。 - UserInfo 對資料類聲明保持穩定欄位集合:已授權返回真實值(若使用者未填寫則為空字串等);未授權返回預設佔位值,不會洩漏真實資料。詳見《權杖與使用者資訊》。
支援的 scope
scope | 同意頁文案(摘要) | 對應 UserInfo 聲明 |
|---|---|---|
openid | 不單獨顯示,始終必選 | sub |
email | 你的電子郵件位址 | email、email_verified |
name | 你的顯示名稱 | name |
nickname | 你的暱稱 | nickname |
picture | 你的大頭貼 | picture |
biography | 你的個性簽名 | biography |
gender | 你的性別 | gender |
birthdate | 你的生日 | birthdate |
region | 你的國家或地區 | region |
preferred_username | 你的使用者名稱 | preferred_username |
locale | 你的首選語言 | locale |
歷史別名(勿再作為「一攬子」權限依賴):
| 別名 | 行為 |
|---|---|
profile | 入站展開為上表全部資料細項;同意頁分項展示 |
name(舊語意) | 若權杖中只有舊版 name、尚無其它細項,相容為 name + nickname |
開發者入口網站規則:
| 權限 | 可否設為必選 | 說明 |
|---|---|---|
openid | 始終必選 | 不可取消 |
email | 可以(必選 / 選用 / 不申請) | 設為必選時須填寫對使用者可見的理由,並設定隱私權政策連結;未綁定電子郵件的使用者須先綁定才能完成授權 |
基本資料細項(name、preferred_username 等) | 可以(必選 / 選用 / 不申請) | 設為必選時同樣須填寫理由與隱私權政策連結;選用時使用者可在同意頁拒絕 |
請按產品需要只勾選真正用到的項;不要把資料權限當成「一攬子必選」。強制索取權限時,理由應如實說明用途(例如:需要作為使用者名稱在被授權方儲存)。
成為開發者:通行帳戶須已綁定通知電子郵件;否則無法登入開發者入口網站,也無法呼叫用戶端註冊 API。
同意頁行為
- 使用者登入後每次進入同意 / 確認頁(
passport.swaymoon.com),不會因「此前已授權相同權限」而靜默略過。 - 展示應用程式名稱、圖示(若有);若設定了隱私權政策連結,頁面提供入口;使用者點選跳轉前會看到「該網域不在搖月 Swaymoon 控制下…」提示。申請了強制權限時,隱私權政策連結為必填。
- 權限未變(相對該使用者已有同意):展示「確認登入」與已授權項目摘要,使用者確認後繼續。
- 權限有增減:標題提示「權限已變更」,分區展示新增必要 / 新增選用(新增强制項旁顯示開發者填寫的理由)、不再申請、仍保留的授權;使用者須對新增選用作出勾選,並確認後繼續。確認後「不再申請」的權限不再寫入同意紀錄。
- 首次授權:按必要與選用分區列出;強制項旁顯示理由。
- 必選權限:勾選且不可取消;旁註為「必要」。
- 選用權限:預設勾選,使用者可逐項取消;旁註為「選用」。
- 若本次將授予
email,而使用者帳戶尚未綁定電子郵件:須先完成電子郵件綁定與驗證,才能繼續授權發碼(必選email時會直接進入綁定頁;選用時也可取消勾選電子郵件後繼續)。 - 僅當本次申請包含
email,且使用者帳戶已綁定通知電子郵件時,電子郵件權限旁出現下拉框(預設隱私郵件,可選真實電子郵件)。第一方應用程式不提供該選項。 - 「繼續」後僅授予最終勾選的選用
scope及全部必選scope(不含「不再申請」項)。 - 「取消」則授權不完成。
授權請求中的
prompt=consent仍可傳送,但不再是強制展示確認頁的必要條件;正式環境也無需依賴該參數來「每次確認」。
舊用戶端相容
應用程式登入時會在位址裡帶上本次申請的權限(例如 scope=openid email)。有些已上線應用程式短期內改不了這串文字。
若你之後在入口網站把某權限改成必選,或新增了選用權限,通行帳戶會在伺服器端自動補全,舊應用程式不必立刻改程式碼:
- 必選:入口網站登記的全部必選都會進入本次授權(即使用戶應用程式位址裡沒寫)。
- 新增選用:使用者已登入且尚未授權過該項時,確認頁會列出供勾選;已授權過的不會再當「新增」。
舉例:入口網站新增强制「使用者名稱」、選用「大頭貼」,舊應用程式仍只請求 openid email → 使用者仍會看到「使用者名稱」(必選),以及尚未授權過的「大頭貼」(選用)。
更完整的說明與對照表見同目錄「更新」下的《2026-08-11 權限與同意平台更新》。
新用戶端仍建議在授權請求中明確列出所需 scope,並與入口網站登記保持一致。
資料刪除回呼
註冊或編輯應用程式時可設定 資料刪除回呼位址(規則與登記入口見同目錄《註冊與設定》「資料刪除回呼位址」)。當使用者在隱私中心選擇「撤銷並請求刪除資料」時,通行帳戶會:
- 撤銷對該應用程式的授權;
- 向應用程式負責人通行帳戶綁定電子郵件傳送說明郵件(郵件會註明回呼是否傳送成功);
- 若已設定回呼位址:由通行帳戶伺服器端向該位址
POSTJSON(type=swaymoon.passport.data_deletion_request),請求頭含X-Swaymoon-Signature: sha256=<hmac>與X-Swaymoon-Request-Id。簽章對原始請求體位元組做 HMAC-SHA256(勿先 JSON 解析再序列化後驗簽)。
簽章金鑰(明文)
| 用戶端類型 | 驗簽金鑰 |
|---|---|
| 機密(confidential) | 建立或輪換時入口網站僅展示一次的 client_secret 明文 |
| 非機密(public) / JWT 斷言 | 若登記了刪除回呼,建立或輪換時會另發 webhookSecret(僅一次);用該值驗簽 |
請妥善保存上述明文。通行帳戶側會把同一份明文存為 webhook 簽章金鑰;庫內用於 OAuth 用戶端認證的 client_secret 可能隨後被編碼為 bcrypt 等不可逆雜湊,不能用雜湊或帶 {bcrypt} 前綴的儲存值做 HMAC。輪換金鑰後,請改用新下發的明文驗簽。
回呼位址僅允許 HTTPS,且主機不能是 127.0.0.1 / localhost。登入 Redirect 仍可用 loopback(瀏覽器跳轉);刪除回呼是伺服器端出站,本機聯調請用 HTTPS 通道。點刪除時接收端須已在執行。
請及時按 subject(及你方保存的使用者識別)刪除本機資料。可執行聯調見《Python 最小可執行範例》機密用戶端一節的「示範資料刪除回呼」。
因此,authorize 中列出的選用 scope 不一定全部出現在權杖的 scope 中。換取權杖後請讀取回應中的 scope,並據此解釋 UserInfo(未授權欄位為預設值,而非真實資料)。
請求與設定的關係
- 授權請求中的
scope應當是用戶端已登記權限範圍的子集(登記時若帶有profile,伺服器端會視同已登記對應細項);伺服器端還會按上文「舊用戶端相容」併入入口網站必選與新增選用。 - 授權請求必須包含
openid。 - 建議直接申請細項,例如:
scope=openid name picture;也可暫時繼續傳profile,由伺服器端展開。 - 使用者同意後會寫入同意帳本;可在通行帳戶「隱私」頁檢視,見使用者指南《授權應用程式》。
產品側與電子郵件
- 不需要電子郵件就不要申請
email。 - 需要電子郵件用於註冊/建檔時,申請
email即可:未綁定電子郵件的使用者會在授權流程中完成綁定;授權成功後 UserInfo 返回可用的email。 - 使用者可能選擇隱私郵件:你方仍只收到一個可發信的位址,真實電子郵件不會提供給你方;按普通電子郵件處理即可。
- 以
sub作為帳號主鍵,電子郵件作聯絡方式或本機帳號名。
變更權限
如需增加或減少 scope:
- 在開發者入口網站開啟識別碼,編輯對應應用程式,在精靈「功能」步調整選用 / 必選權限並儲存(無需因改權限而重新建立用戶端;用戶端類型仍不可互轉)。
- 將某權限設為必選時:為該權限填寫對使用者可見的理由,並確保已設定隱私權政策連結。
- 使用者下次登入同一應用程式時會進入授權頁:若權限有增減,將看到新增 / 不再申請 / 仍保留的分區,並對新增選用作出選擇;若權限未變,則確認登入即可。
已上線的舊用戶端無需為配合本次能力而改程式碼;入口網站儲存後,由伺服器端合併 scope 並強制展示授權確認頁。新用戶端開發請以最新文件為準。
刪除識別碼或使用者撤銷同意後,請勿繼續使用舊權杖存取使用者資料。