授權流程

在 eKYC App 中發起同意,並安全地驗證 callback。

Partner Auth 是平台自有的 authorization-code-like 協定。它不是 OAuth 2.1 或 OpenID Connect。token exchange 支援選用的 S256 PKCE:授權時帶 code_challenge,交換時就必須帶對應的 code_verifier;沒帶 code_challenge 的授權流程維持原本的 client secret 驗證。

組成 authorize URI

ekyc://authorize
  ?client_id=sample-app
  &redirect_uri=sample-app%3A%2F%2Fauth%2Fekyc%2Fcallback
  &scope=profile.basic%20kyc.status
  &state=RANDOM_STATE

使用 S256 PKCE 時,Application 後端保存 code_verifier,並在 URI 加上 code_challenge 與 code_challenge_method=S256。App 會在登入後保留這兩個欄位,並傳給 authorize API;不會取得 verifier。Challenge 必須是 43–128 字元的 base64url 字串;省略 method 時使用 S256。重複的 PKCE 參數、格式錯誤的 challenge、其他 method,或只有 method 沒有 challenge 的 deep link 都會被拒絕,不會自動改用未啟用 PKCE 的流程。

登入後,eKYC App 會先把請求欄位送到需登入的 POST /api/partner-auth/preview。在平台確認 Organization、Merchant、Partner Client 皆為 active、環境、allowlist 中的 redirect URI、允許的 scopes、membership 狀態與最新的後端 Eligibility 之前,同意動作會保持鎖定。Preview 不會建立 membership。

使用者檢視並核准 scopes 後,eKYC App 才會把同一組 URI 轉換為需登入的 POST /api/partner-auth/authorize 請求。

Android 與 iOS build 都把 ekyc://authorize 註冊為 custom-scheme deep link。eKYC App 會在登入過程中保留待處理的請求,顯示同意畫面,將 API 回應與原始的 state、redirect_uri 比對後,再開啟已註冊的 callback。目前使用者取消時只會關閉同意畫面,不會送出錯誤 callback。

驗證 callback

sample-app://auth/ekyc/callback?code=SHORT_LIVED_CODE&state=RANDOM_STATE

你的 App 必須精確比對 state、拒絕缺漏的值,並立即把 code 送到自己的後端。Code 會在 5 分鐘後過期、只能使用一次,且綁定於該 client 與 redirect URI。