spring security oauth2 令牌生成流程爲(藍色字體爲類,紅色字體爲接口):
/oauth/token/請求 --> TokenEndpoint --> ClientDetailsService(InMemoryClientDetailsService) --> ClientDetails --> TokenRequest --> TokenGraner(CompositeTokenGranter) --> Oauth2Request + Authentication -->Oauth2Authentication --> AuthorizationServerTokenServices(DefaultTokenServices)-->OAuth2AccessToken
說明:
TokenEndpoint: 簡單來說 TokenEndpoint 如同Controller 一樣 監聽/oauth/token/
ClientDetailsService(InMemoryClientDetailsService): 這個service就是獲取當前請求的第三方,clientId 和 secret
ClientDetails: 由TokenEndpoint創建 放入第三方信息
TokenRequest : 由TokenEndpoint創建 放入其他請求信息
TokenGraner(CompositeTokenGranter) : 這裏面封裝了4種授權模式,看請求的參數使用哪種授權模式
Oauth2Request: 這TokenGraner創建 是ClientDetails 和 TokenRequest 的信息整合
Authentication : 這裏就是封裝好授權的用戶(由Security的UserDetailService 獲取的)
Oauth2Authentication : 由 Oauth2Request和 Authentication 組合成的,把之前的信息封裝好:是哪個第三方,然後是哪個用戶授權,用的是哪個授權模式,授權的參數是什麼
AuthorizationServerTokenServices(DefaultTokenServices): 根據Oauth2Authentication生成令牌 方法:TokenStroe(設置令牌的存取) TokenEnhancer(令牌的增強器,往令牌加東西)