如何使用SpringSecurity與Oauth2.0

本篇內容主要講解“如何使用Spring Security與Oauth2.0”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“如何使用Spring Security與Oauth2.0”吧!

成都創(chuàng)新互聯(lián)公司主要從事成都網站設計、網站制作、網頁設計、企業(yè)做網站、公司建網站等業(yè)務。立足成都服務紫云,十多年網站建設經驗,價格優(yōu)惠、服務專業(yè),歡迎來電咨詢建站服務:18980820575

問題

最近由于工作變動,我又開始搞 Java 后臺了(做回老本行)。目前第一個工作項目是搞一個用戶認證中心,于是便一腳踏入了 Spring Security 的坑里面。其實當下比較流行的一套解決方案就是 Spring Security + Oauth3.0 + JWT 方式??墒钱斘议_始集成 Spring Security 和 Oauth3.0 的時候,我眉頭一皺突然發(fā)現這個事情不簡單。

<!--more-->

在創(chuàng)建 Springboot 工程時,可以選擇以下的 Oauth3.0 依賴:

spring-boot-starter-oauth3-client
spring-boot-starter-oauth3-resource-server
spring-cloud-starter-oauth3

我心想咋還這么多依賴包呢。本著面向百度編程的原則,從一眾“天下文章一大抄”的博客里發(fā)現他們還用的是另外兩個依賴:

spring-security-oauth3
spring-security-oauth3-autoconfigure

這我就頭大了啊,咋還整得這么復雜呢。所以只能去扒官方文檔了。

官方文檔解釋

看到 Spring 官方對于 Oauth3.0 的解釋,他說了這么一句

The Spring Security OAuth project is deprecated. The latest OAuth 2.0 support is provided by Spring Security. See the OAuth 2.0 Migration Guide for further details.

也就是說原來的 Spring Security OAuth3.0 已經廢棄了,有關 OAuth3.0 的支持已經集成到了 Spring Security 里面了。這我就懵了。。。emmm。也就是說現在如果使用spring-security-oauth3,里面大部分方法都是被橫線劃掉的(被廢棄的)。為啥要這樣呢?

后來本著吃瓜的心態(tài),扒了扒 OAuth 和 Spring 社區(qū)的歷史。發(fā)現在 2018 年,Spring 社區(qū)就發(fā)布了聲明,說是要逐漸停止現有的 OAuth3 支持,而在 Spring Security5 中構建下一代 OAuth3.0 支持。原因是Oauth3 落地混亂:Spring Security OAuth、Spring Cloud Security、Spring Boot 1.5.x 以及當時最新的 Spring Security5.x 中都提供了對 OAuth3 的實現。因此官方要統(tǒng)一放在一個地方。

我想,這是個好事啊,省的讓大家不知道使用哪一個了。當然官方也是很給力,不僅完成了對 Oauth3.0 的支持,也加入了 OpenID Connect1.0 的支持。但是呢,社區(qū)又來了個騷操作:宣布不再支持授權服務器。因為官方認為授權服務器是一種產品形態(tài),并非框架該完成的,其次目前已經有很多商用和開源的授權服務器了(例如 Keycloak、Okta)。但是一眾開發(fā)者不服啊,在社區(qū)里進行激烈討論。于是官方妥協(xié),發(fā)起了新的項目 spring-authorization-server,目前已經迭代到了0.0.3版本。

現狀 & 遷移

吃完瓜,來看看這幾個包現在是什么狀態(tài)。

spring-security-oauth3  -> 被廢棄,建議不使用,否則后期無法維護

spring-security-oauth3-autoconfigure  -> 自動配置,沒有用處
spring-boot-starter-oauth3-client -> 最新
spring-boot-starter-oauth3-resource-server  -> 最新
spring-cloud-starter-oauth3 -> 引用 spring-security-oauth3,但尚未標注被廢棄

這樣就比較明確了,現在的項目中需要依據該服務的用途去引用對應的包。

授權服務器

如果服務想做成授權服務器,暫時只能引用spring-cloud-starter-oauth3。因為這個包也是引用了spring-security-oauth3,但尚未標注@Deprecated,然后仍舊使用@EnableAuthorityServer注解進行配置。等待spring-authorization-server成熟,需要切換過來。

客戶端

現在如果要開發(fā)客戶端,只需要引用spring-boot-starter-oauth3-client,也只需要在原來的 SpringSecurity 的配置類中,調用.oauth3Client()即可配置,不需要以前的@EnableOAuth3Client注解了。

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

	@Override
	protected void configure(HttpSecurity http) throws Exception {
		http
			.authorizeRequests()
				.anyRequest().authenticated()
				.and()
			.formLogin()
				.loginPage("/login")
				.failureUrl("/login-error")
				.permitAll()
				.and()
			.oauth3Client(); //
	}

}

除此之外,也需要配置WebClientOAuth3AuthorizedClientManager這兩個 Bean。具體如何實現,先挖個坑,以后再填。

資源服務器

資源服務器也只需要引用spring-boot-starter-oauth3-resource-server,若使用 JWK 方式,其配置如下(也僅僅是調用.oauth3ResourceServer()

@Configuration
@EnableWebSecurity
public class MySecurityConfig extends WebSecurityConfigurerAdapter {
    @Value("${spring.security.oauth3.resourceserver.jwt.jwk-set-uri}")
    private String jwkSetUri;

    @Override
    protected void configure(HttpSecurity http) throws Exception{
        http
                .oauth3ResourceServer(OAuth3ResourceServerConfigurer::jwt)
                .csrf().disable()
                .authorizeRequests()
                .antMatchers("/message/**").hasAuthority("SCOPE_all")
                .anyRequest().authenticated();
    }

    @Bean
    JwtDecoder jwtDecoder() {
        return NimbusJwtDecoder.withJwkSetUri(this.jwkSetUri).build();
    }
}

到此,相信大家對“如何使用Spring Security與Oauth2.0”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!

當前文章:如何使用SpringSecurity與Oauth2.0
瀏覽路徑:http://muchs.cn/article38/jehcpp.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供全網營銷推廣定制開發(fā)、搜索引擎優(yōu)化網站改版、外貿建站、網站建設

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都做網站