Class ClientCredentialsService

java.lang.Object
io.leandev.appfuse.security.auth.ClientCredentialsService

public class ClientCredentialsService extends Object

M2M 憑證發放 capability——登入引擎的第四操作(ADR-025

client_credentials grant(RFC 6749 §4.4): 機器客戶端以 client_id/client_secret 換取短效 access token。與 LoginService 的 login/refresh/logout 並列,共用全部下層——主體查找、資格判定、租戶探詢、token 簽發。

與登入的三個刻意差異

面向 登入 本操作
資格判定 主體必須可互動登入 主體必須不可AuthPrincipal.interactiveLoginAllowed() 反向)
refresh token 不發(RFC 6749 §4.4.3 SHOULD NOT)
sessionId/黑名單 ——撤銷靠短效期與停用主體(M2M 無「登出」語意)

憑證比對委派 AuthenticationManager(決策四):因而自動取得認證事件與統一稽核, 且引擎不需要碰 PasswordEncoder用哪個 manager 由消費端組裝決定——登入鎖定是否 套用於 M2M 是產品決策(鎖定服務帳號可能被外部誤用觸發、造成整合中斷),框架不預設。

線格式歸 capability(決策二):請求解析與 client 認證方式見 ClientCredentialsRequest, 錯誤碼與狀態見 OAuth2TokenException,回應見 ClientCredentialsTokenResponse。消費端的殼 只負責把參數交進來、選擇錯誤序列化的方言。

組合:jar 不做 autoconfiguration(ADR-014),由消費端組態以 @Bean 建立。 未提供限流器時建構期發 WARN——公開端點無限流即為雜湊 CPU 的耗盡面, 不讓「忘了接」變成靜默失去保護。

  • Constructor Details

    • ClientCredentialsService

      public ClientCredentialsService(org.springframework.security.authentication.AuthenticationManager authenticationManager, JwtTokenProvider jwtTokenProvider, AuthPrincipalLookup principalLookup, long tokenTtlMs, Optional<ClientCredentialsRateLimiter> rateLimiter, boolean requireTenant)
      建構子(全部參數皆可由 Spring 建構子注入解析)
      Parameters:
      authenticationManager - 憑證比對(消費端組裝;是否含登入鎖定由其決定)
      jwtTokenProvider - token 簽發
      principalLookup - 主體查找 SPI
      tokenTtlMs - access token 有效期(毫秒)
      rateLimiter - 速率限制;empty = 不限流(會發 WARN,見下)
      requireTenant - 是否要求主體必帶租戶(租戶隔離部署應為 true)
  • Method Details