Class SignedLinkService

java.lang.Object
io.leandev.appfuse.security.link.SignedLinkService

public class SignedLinkService extends Object

簽章連結原語

把「簽一張帶用途與導向目標的連結 token」與「驗章 + 依政策贖回」做成可復用的工具, 讓下游用它實作免密碼登入、事件通知深連結等「能收到該帳號 email 即可進入目標頁」的功能。

本原語租戶中性、不碰寄信、不認得 HTTP:只負責 issue(SignedLinkSpec) 鑄出簽章 token、consume(String) 驗章並回傳 SignedLinkToken。連結 URL 怎麼拼、信件主旨 / 內文、身分如何載入與 session 如何換發,全由消費端決定。

簽章重用 JWT(RSA),金鑰由建構子注入(可與 JwtTokenProvider 共用同一組金鑰); 簽出的是獨立用途的 token(帶 purpose / target / redemption 等 claim),與一般 session token 互不相通——消費端應另以 purpose 隔離不同用途的連結。

執行緒安全性:無可變狀態,執行緒安全(單次性由 SignedLinkStore 承擔)。

Since:
1.0
  • Field Details

  • Constructor Details

    • SignedLinkService

      public SignedLinkService()
  • Method Details

    • issue

      public String issue(SignedLinkSpec spec)

      簽發一張簽章連結 token

      SignedLinkSpec.redemption:SINGLE_USE 會額外將 jti 登記進 SignedLinkStore (供 consume(String) 原子贖回);REUSABLE 不碰 store。

      Parameters:
      spec - 簽發參數(subject / purpose / ttl 必填;redemption 缺省 SINGLE_USE)
      Returns:
      已簽章的 token 字串(消費端自行拼進連結 URL)
      Throws:
      IllegalArgumentException - 若必填欄位缺漏或 ttl 非正
    • consume

      public SignedLinkToken consume(String rawToken)

      驗章並贖回一張簽章連結 token

      驗證簽章與有效期後,依 token 攜帶的政策:SINGLE_USE 會原子地消費 jti (已用過或逾期 → 丟例外);REUSABLE 在有效期內可重複呼叫成功。

      Parameters:
      rawToken - 連結攜帶的 token 字串
      Returns:
      解析後的 SignedLinkToken
      Throws:
      VerificationException - 若簽章無效、已過期,或 SINGLE_USE 連結已被使用過