註冊與設定 開發人員

上次更新:2026年8月16日

註冊與設定

接入前,請先在開發者入口網站建立 OAuth / OIDC 用戶端(頁面稱為識別碼),設定重新導向 URI 與權限,並依用戶端類型取得憑證。協定接入(授權碼、權杖、同意頁等)見本目錄下《接入概述》及後續文件。

2026-08-11:識別碼權限可在入口網站編輯;強制權限須填理由與隱私權政策;使用者每次登入須確認授權。變更說明見同目錄「更新」下的《2026-08-11 權限與同意平台更新》。

入口

  1. 使用通行帳戶登入 develop.swaymoon.com
  2. 在首頁「計劃資源」中進入識別碼(側欄亦有同名入口)。
  3. 點選左上角 +,開啟「註冊應用程式識別碼」精靈。
  4. 按照精靈依序完成:描述 → 圖示 → 重新導向 URI → 功能 → 確認。

開發者入口網站透過通行帳戶 API(https://api-passport.swaymoon.com/api/v1/developer/...)管理用戶端。執行相關操作前,你需要先登入通行帳戶。

用戶端類型

類型clientType認證方式適用場景
機密用戶端confidential(預設)client_secret_basic可由後端安全保管 client_secret 的 Web / 伺服器端應用程式
非機密用戶端publicnone(僅 PKCE)純 HTML / 靜態站 / 純 SPA、原生用戶端等:執行時期不宜保管 client_secret
JWT 斷言用戶端private_key_jwtprivate_key_jwt伺服器保管 EC P-256 私鑰,入口只登記公鑰;換權杖時用 client_assertion

三種均強制 PKCE(S256),並要求使用者在授權頁明確確認後登入(不會因「此前已授權」而靜默略過)。用戶端類型在建立後不可互轉

JWT 斷言是什麼

private_key_jwt 是 OAuth 2.0 / OpenID Connect 的一種用戶端認證方式(RFC 7523):換權杖時,你的伺服器用自己保管的私鑰簽發一枚短期 JWT(client_assertion),通行帳戶用你在入口登記的公鑰驗簽。它仍是機密用戶端——私鑰不能離開伺服器——只是證明身分的材料從「雙方共享的 client_secret」換成了「非對稱金鑰」。

對比機密(client_secret_basicJWT 斷言(private_key_jwt非機密(none
適合有後端、可保管共享金鑰有後端、希望入口看不到私鑰、要按 kid 輪換SPA / 靜態站 / 原生,執行時期不能藏金鑰
入口保存不回看 client_secret 明文只存公鑰無金鑰
換權杖HTTP Basic + PKCEclient_assertion + PKCE表單 client_id + PKCE
Refresh Token

選 JWT 斷言:伺服器端應用程式,不想把長期 client_secret 放在環境變數裡,或需要不停機輪換金鑰。
不要選:純瀏覽器 SPA、無法保管私鑰的靜態站——繼續用非機密。

換權杖時 client_assertion 必須帶哪些聲明、請求長什麼樣,見《授權碼與 PKCE》與《範例與疑難排解》。

精靈欄位

步驟欄位說明
描述描述、用戶端類型、公鑰 JWK「描述」即應用程式名稱,展示在使用者同意頁;類型見上表(編輯時類型唯讀)。選 JWT 斷言時須貼上 EC P-256 公鑰 JWK(含 kid
圖示預設圖示或上傳裁剪同意頁展示;預設可依應用程式首字產生;也可上傳 JPEG / PNG / WebP,裁剪為約 512×512 正方形 JPEG(不超過 512KB)
重新導向 URIRedirect URI 白名單授權成功或取消後,使用者瀏覽器返回的位址;至少設定一條,且須與授權請求中的 redirect_uri 完全一致(可新增多條)。本機可用 http://127.0.0.1
重新導向 URI資料刪除回呼位址(選用)使用者請求刪除資料時,由通行帳戶伺服器端 POST 簽章請求包的位址(不是瀏覽器跳轉)。見下文「資料刪除回呼位址」
重新導向 URI隱私權政策連結使用者在同意頁與「應用程式授權」詳情中可見;點選前會提示該網域不在搖月控制下。申請任一強制權限(除 openid 外的必選)時必填。見下文「隱私權政策連結」
功能必選 / 選用 scope 與理由新建與編輯均可設定;openid 始終必選;email 與資料細項可設為必選、選用或不申請。設為必選時須填寫對使用者可見的理由,並設定隱私權政策。詳見《權限與同意》
確認新建點「註冊」;編輯點「儲存」可更新名稱 / 圖示 / 回呼 / 資料刪除位址 / 隱私權政策 / 權限與理由

建立結果

機密用戶端

欄位說明
client_idswm_ 開頭的用戶端識別,可以公開出現在授權 URL 中
client_secret僅在建立或輪換時展示一次,請立即將其存入金鑰管理系統。遺失後可在識別碼詳情頁輪換,不必刪除重建

設定要點:

  • 認證方式:client_secret_basic
  • 授權類型:authorization_coderefresh_token
  • Access Token 約 5 分鐘;Refresh Token 約 180 天(重新整理後不再重複使用舊的 Refresh Token)

非機密用戶端

欄位說明
client_idswm_ 開頭的用戶端識別
client_secret不發放

設定要點:

  • 認證方式:none
  • 授權類型:僅 authorization_code不簽發 refresh_token;Access Token 過期後重新走授權碼流程)
  • Access Token 約 5 分鐘
  • 換取權杖時在請求體提交 client_idcode_verifier不要使用 HTTP Basic
  • 可執行聯調見《Python 最小可執行範例》;AI 輔助見《使用生成式 AI 接入機密用戶端》《使用生成式 AI 接入非機密用戶端》

JWT 斷言用戶端

欄位說明
client_idswm_ 開頭的用戶端識別
client_secret不發放
公鑰 kid建立時登記的 EC P-256 公鑰識別;可在詳情頁追加更多公鑰以便輪換

設定要點:

  • 認證方式:private_key_jwtclient_assertion + ES256)
  • 授權類型:authorization_coderefresh_token
  • Access Token 約 5 分鐘;Refresh Token 約 180 天
  • 換取權杖時提交 client_idcode_verifierclient_assertion(不要使用 HTTP Basic)
  • 私鑰只留在你的伺服器;入口拒絕接受私鑰 JWK

重新導向 URI(Redirect URI)規則

  • 必須提供至少一條非空白 URI。
  • 授權請求中的 redirect_uri 必須與登記值逐字元一致,包括 scheme、host、port、path 和 query。
  • 不要在 Redirect URI 中使用 #fragment(協定不允許)。
  • 正式環境強烈建議使用 https://。本機開發可以使用 http://127.0.0.1:... 等迴路位址,但須符合伺服器的校驗策略。
  • 不支援萬用字元網域。對於多個環境,請分別登記對應的 URI。
  • http://127.0.0.1http://localhost 視為不同位址。
  • 誰在存取:授權完成後由使用者瀏覽器跳轉到該位址。因此登記 http://127.0.0.1:8766/callback 時,只要瀏覽器與本機 demo 在同一台電腦上,登入回呼即可到達。

資料刪除回呼位址

選用。使用者在通行帳戶隱私中心選擇「撤銷並請求刪除資料」時,通行帳戶會:

  1. 撤銷對該應用程式的授權;
  2. 向應用程式負責人綁定電子郵件傳送說明郵件;
  3. 若已設定本位址,由通行帳戶 API 行程所在機器向該 URL 發起 POST(簽章約定見《權限與同意》)。
說明
是否必填否;未設定則只發郵件、不發 HTTP 回呼
允許的 URL可被通行帳戶伺服器端存取的 https://…
禁止http://(任意)、127.0.0.1localhost::1 等迴路位址
誰在存取Passport 伺服器端,不是瀏覽器(因此不能照搬登入用的 loopback Redirect)
本機聯調使用 ngrok、Cloudflare Tunnel 等把本機接收端暴露為 HTTPS,把通道 URL 登記於此;點刪除時通道與接收端須已在執行
與 Redirect登入 Redirect 仍可用 http://127.0.0.1(瀏覽器跳轉);刪除回呼與登入回呼不是同一條通路
簽章金鑰機密:建立或輪換時下發的 client_secret 明文非機密 / JWT(已配回呼):建立或輪換時下發的 webhookSecret。須對原始 body 驗簽,見《權限與同意》

可執行聯調見《Python 最小可執行範例》機密用戶端一節的「示範資料刪除回呼」。

隱私權政策連結

選用。登記後,使用者可在:

  • 授權同意頁(若已設定);
  • 通行帳戶 隱私應用程式授權 → 應用程式詳情;

檢視並開啟該連結。點選跳轉前,通行帳戶會提示:該網域不在搖月 Swaymoon 控制下,其內容不受搖月 Swaymoon 管理。

說明
是否必填申請除 openid 外的強制權限時必填;否則選用
允許的 URL公網 https://…;本機聯調可用 http://127.0.0.1 / http://localhost(亦可用 https://
禁止非迴路主機的 http://
誰在存取使用者瀏覽器(與登入 Redirect 相同,不是伺服器端出站)
API 欄位建立 / 更新用戶端請求體中的 privacyPolicyUri

建議在應用程式正式上線前設定可公開存取的 HTTPS 隱私權政策頁,便於使用者在授權前了解你方如何處理其資料。

權限設定建議

需求建議 scope
僅登入、建立本機帳號openid
需要展示使用者稱呼openid + name(必要時再加 nickname / picture;可設選用或必選)
需要聯絡電子郵件openid + email(可在入口網站設為必選或選用;選用時尊重使用者取消)
需要在本應用程式儲存使用者名稱openid + preferred_username(若設為必選,須填寫理由與隱私權政策)

openid 始終為必選。將 email 或資料細項設為必選時,須填寫對使用者可見的理由,並設定隱私權政策連結。選用權限在同意頁預設勾選,使用者可以取消,詳見《權限與同意》。

管理操作

  • 列表:檢視已建立的識別碼、名稱、client_id、用戶端類型與認證方式、必選 / 選用權限。
  • 詳情:檢視回呼、隱私權政策、權限、webhook 金鑰是否已簽發,以及 JWT 公鑰 kid
  • 編輯:可修改描述(名稱)、圖示、重新導向 URI、資料刪除回呼位址、隱私權政策連結、必選 / 選用權限與強制權限理由
  • 輪換金鑰:機密用戶端可在詳情頁輪換 client_secret(同時更新刪除回呼驗簽明文)。非機密 / JWT 可簽發或輪換 webhookSecret
  • 追加公鑰:JWT 斷言用戶端可在詳情頁追加另一把公鑰(按 kid 區分),便於不停機輪換。
  • 不可編輯:用戶端類型(機密 / 非機密 / JWT 斷言)建立後鎖定。若需更換用戶端類型,請刪除舊識別碼並重新註冊,再更新應用程式內設定。
  • 刪除:刪除識別碼後,已發放的權杖將無法繼續用於該用戶端,使用者側的授權關係也會失效。

相容提示:已上線的舊用戶端無需因平台支援「可編輯權限 / 強制授權確認」而改程式碼;新用戶端開發請以最新文件為準。詳見《權限與同意》。

建立用戶端可呼叫 POST /api/v1/developer/clients,在 JSON 體中傳入 clientTyperequiredScopes / optionalScopesscopeReasons,以及選用的 dataDeletionUriprivacyPolicyUri。更新已有用戶端可呼叫 PUT /api/v1/developer/clients/{clientId}(可更新權限與理由)。

下一步:閱讀同目錄《接入概述》,再實作《授權碼與 PKCE》。