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)。
username、enabled 等旗標與 authorities 皆由 UserDetails 既有成員承擔;本契約唯一
新增的成員是 interactiveLoginAllowed()。
租戶刻意不在本契約:需要 tenantId claim 的部署,由 principal 實作另行實作
TenantAwareUserDetails,引擎以 instanceof 探詢
(ADR-017 決策三的探詢 pattern);無租戶的部署零感知。
契約收窄原則:每多一個成員就是一分對消費端的實作偏見。wire 面需求(顯示名稱、 email、主要角色等)不屬引擎、不得增列於此——那是消費端 HTTP 殼的事。
-
Method Summary
Methods inherited from interface org.springframework.security.core.userdetails.UserDetails
getAuthorities, getPassword, getUsername, isAccountNonExpired, isAccountNonLocked, isCredentialsNonExpired, isEnabled
-
Method Details
-
subject
Token 與 session 使用的穩定主體識別。
預設沿用
UserDetails.getUsername()以維持既有實作相容;當登入名稱不是全域唯一 (例如同一 username 可存在於多個 tenant)時,應用應回傳不可變的 account id。 顯示用 username 仍屬應用 wire model,不應拿來當 JWTsub。 -
interactiveLoginAllowed
default boolean interactiveLoginAllowed()本主體可否使用互動式登入/刷新
「服務帳號(M2M)不可互動登入」這類資格判定的一般化——引擎不認識任何具體的帳號 分類概念,只問這個判定結果。引擎保留拒絕原因,HTTP 揭露程度由
ErrorDisclosurePolicy決定。- Returns:
- true 允許互動式登入與刷新(預設);false 拒絕
-