spring整合oauth2.0

        既然大家都使用spring,作爲一個javaer必須是spring程序員。我不是很喜歡spring-security的那一套,

   但是仔細看過它的代碼之後感覺雖然寫的不怎麼樣,但是很全,實現的比較完整,所以試了一下整合oauth2.0.

    oauth2第三方登錄的時候非常好,權限控制非常到位,如果不清楚oauth2的可以花一分鐘看看這篇,寫的很詳細http://www.ruanyifeng.com/blog/2019/04/oauth-grant-types.html。oauth2 也比較普遍,值得花時間搞清楚裏面的每一個細節和每個概念。

    oauth授權之前有兩個概念要清楚,第一個是授權服務器,第二是資源服務器。授權服務器是專門用來生成token,驗證token,以及刷新token的。

而資源服務器只是校驗訪問連接是否帶上了token,以及該token是否有權限訪問該資源。在Spring 裏面要配置資源服務是使用的

org.springframework.security.oauth2.config.annotation.web.configurers.ResourceServerSecurityConfigurer

    這個類有很多屬性,

    authenticationManager 是授權的管理器

    在獲取授權對象的時候會調用AuthenticationManager.authenticate方法獲取auth對象。具體的在 OAuth2AuthenticationProcessingFilter 這個請求處理請求的時候獲取。

tokenStore 是指定一共token存儲

默認是 InMemoryTokenStore,也就是在內存中,AuthenticationManager是在tokenStore裏面獲取,可以指定jdbc/redis,也可以自定義。

resourceId 是指定這個資源服務器的資源id

在校驗token的時候,如果發現授權的token不具備訪問這個資源id的權限就可以直接拒絕掉。

還要一些其他屬性。主要重要的就如上幾個,資源服務也可以控制到具體請求路徑的權限,因爲資源服務器的配置也會有一個HttpSecurity.如下代碼

@Override
public void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests().anyRequest().hasRole("USER");
}

就是希望所有路徑都需要有ROLE_USER權限,那麼請求的所有token必須有這個權限,否則會Access is denied

 

 

    現在有了資源服務器,還需要授權服務器,在spring裏面可以使用

org.springframework.security.oauth2.config.annotation.web.configuration.AuthorizationServerConfigurerAdapter

來配置。授權服務器需要配置

ClientDetailsServiceConfigurer 和
AuthorizationServerEndpointsConfigurer

ClientDetailsServiceConfigurer 可以存儲client相關信息,比如client_id,client_secret.如下代碼

clients.inMemory()   // 基於內存
        .withClient("app")  //授權客戶端
        .secret(passwordEncoder.encode("app-secret"))  //授權碼
        .accessTokenValiditySeconds((int) TimeUnit.HOURS.toSeconds(1))  // 授權過期時間
        .authorizedGrantTypes("client_credentials", "refresh_token")  // 授權模式
        .scopes("all")  // 授權範圍
        .authorities("ROLE_USER")
        .resourceIds("oauth2-resource");  // 授權資源

是配置了一個相對完善的client信息。

AuthorizationServerEndpointsConfigurer 裏面需要指定tokenStore,這裏使用的tokenStore需要同資源服務器的一致,保證授權服務籤的token可以被資源服務通過。

 

 

    配置還是比較簡單,原理也比較清楚,可以實際接第三方試試

    

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章