Interface AuthPrincipal

All Superinterfaces:
Serializable, org.springframework.security.core.userdetails.UserDetails
All Known Implementing Classes:
DefaultAuthPrincipal

public interface AuthPrincipal extends org.springframework.security.core.userdetails.UserDetails

登入引擎對「可登入主體」的最小契約(ADR-023

LoginService 對帳號的全部需求以本契約表達——帳號的結構、持久化方式、擴充欄位一概不假設 (對齊 Spring Security UserDetails 的設計哲學;ADR-017:jar 不擁有 entity)。 usernameenabled 等旗標與 authorities 皆由 UserDetails 既有成員承擔;本契約唯一 新增的成員是 interactiveLoginAllowed()

租戶刻意不在本契約:需要 tenantId claim 的部署,由 principal 實作另行實作 TenantAwareUserDetails,引擎以 instanceof 探詢 (ADR-017 決策三的探詢 pattern);無租戶的部署零感知。

契約收窄原則:每多一個成員就是一分對消費端的實作偏見。wire 面需求(顯示名稱、 email、主要角色等)不屬引擎、不得增列於此——那是消費端 HTTP 殼的事。

  • Method Summary

    Modifier and Type
    Method
    Description
    default boolean
    本主體可否使用互動式登入/刷新
    default String
    Token 與 session 使用的穩定主體識別。

    Methods inherited from interface org.springframework.security.core.userdetails.UserDetails

    getAuthorities, getPassword, getUsername, isAccountNonExpired, isAccountNonLocked, isCredentialsNonExpired, isEnabled
  • Method Details

    • subject

      default String subject()

      Token 與 session 使用的穩定主體識別。

      預設沿用 UserDetails.getUsername() 以維持既有實作相容;當登入名稱不是全域唯一 (例如同一 username 可存在於多個 tenant)時,應用應回傳不可變的 account id。 顯示用 username 仍屬應用 wire model,不應拿來當 JWT sub

    • interactiveLoginAllowed

      default boolean interactiveLoginAllowed()

      本主體可否使用互動式登入/刷新

      「服務帳號(M2M)不可互動登入」這類資格判定的一般化——引擎不認識任何具體的帳號 分類概念,只問這個判定結果。引擎保留拒絕原因,HTTP 揭露程度由 ErrorDisclosurePolicy 決定。

      Returns:
      true 允許互動式登入與刷新(預設);false 拒絕