国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Spring Authorization Server 系列】(一)入門篇,快速搭建一個授權(quán)服務(wù)器

這篇具有很好參考價值的文章主要介紹了【Spring Authorization Server 系列】(一)入門篇,快速搭建一個授權(quán)服務(wù)器。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Spring Authorization Server

簡介

官方主頁:https://spring.io/projects/spring-authorization-server

Spring Authorization Server 是一個框架,提供了 OAuth 2.1 和 OpenID Connect 1.0 規(guī)范以及其他相關(guān)規(guī)范的實現(xiàn)。 它建立在 Spring Security 之上,為構(gòu)建 OpenID Connect 1.0 Identity Providers 和 OAuth2 Authorization Server 產(chǎn)品提供安全、輕量級和可定制的基礎(chǔ)。

Spring實現(xiàn)OAuth2的舊版的框架是 Spring Security OAuth2,該框架已停止維護。Spring Security OAuth2認(rèn)證/授權(quán)服務(wù)器的前世今生

功能列表

https://docs.spring.io/spring-authorization-server/docs/0.3.1/reference/html/overview.html

  • 授權(quán)方式支持授權(quán)碼(Authorization Code)、客戶憑證(Client Credentials)
  • 令牌支持刷新(Refresh Token)
  • 令牌格式支持自包含(JWT)和引用(Opaque)

入門案例

官方案例:https://docs.spring.io/spring-authorization-server/docs/0.3.1/reference/html/getting-started.html

本案例基于官方案例,做了一絲絲改動,便于調(diào)試。

1. 創(chuàng)建 SpringBoot 項目

一個 pom,一個 Application 啟動類,相信難不倒你,跳過。

2. 引入依賴

本案例使用 0.3.1 版本

    <properties>
        <spring-authorization-server.version>0.3.1</spring-authorization-server.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-oauth2-authorization-server</artifactId>
            <version>${spring-authorization-server.version}</version>
        </dependency>
    </dependencies>

3. 編寫配置

  • 配置類
    為了便于調(diào)試授權(quán)碼流程,給客戶端多加了個重定向地址 .redirectUri("https://cn.bing.com")
@Configuration
public class SecurityConfiguration {

    @Bean
    @Order(1)
    public SecurityFilterChain authorizationServerSecurityFilterChain(HttpSecurity http)
            throws Exception {
        OAuth2AuthorizationServerConfiguration.applyDefaultSecurity(http);
        http
                // Redirect to the login page when not authenticated from the
                // authorization endpoint
                .exceptionHandling((exceptions) -> exceptions
                        .authenticationEntryPoint(
                                new LoginUrlAuthenticationEntryPoint("/login"))
                );

        return http.build();
    }

    @Bean
    @Order(2)
    public SecurityFilterChain defaultSecurityFilterChain(HttpSecurity http)
            throws Exception {
        http
                .authorizeHttpRequests((authorize) -> authorize
                        .anyRequest().authenticated()
                )
                // Form login handles the redirect to the login page from the
                // authorization server filter chain
                .formLogin(Customizer.withDefaults());

        return http.build();
    }

    @Bean
    public UserDetailsService userDetailsService() {
        UserDetails userDetails = User.withDefaultPasswordEncoder()
                .username("user")
                .password("password")
                .roles("USER")
                .build();

        return new InMemoryUserDetailsManager(userDetails);
    }

    @Bean
    public RegisteredClientRepository registeredClientRepository() {
        RegisteredClient registeredClient = RegisteredClient.withId(UUID.randomUUID().toString())
                .clientId("messaging-client")
                .clientSecret("{noop}secret")
                .clientAuthenticationMethod(ClientAuthenticationMethod.CLIENT_SECRET_BASIC)
                .authorizationGrantType(AuthorizationGrantType.AUTHORIZATION_CODE)
                .authorizationGrantType(AuthorizationGrantType.REFRESH_TOKEN)
                .authorizationGrantType(AuthorizationGrantType.CLIENT_CREDENTIALS)
                .redirectUri("http://127.0.0.1:8080/login/oauth2/code/messaging-client-oidc")
                .redirectUri("http://127.0.0.1:8080/authorized")
                .redirectUri("https://cn.bing.com") // 便于調(diào)試授權(quán)碼流程
                .scope(OidcScopes.OPENID)
                .scope("message.read")
                .scope("message.write")
                .clientSettings(ClientSettings.builder().requireAuthorizationConsent(true).build())
                .build();

        return new InMemoryRegisteredClientRepository(registeredClient);
    }

    @Bean
    public JWKSource<SecurityContext> jwkSource() {
        KeyPair keyPair = generateRsaKey();
        RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();
        RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();
        RSAKey rsaKey = new RSAKey.Builder(publicKey)
                .privateKey(privateKey)
                .keyID(UUID.randomUUID().toString())
                .build();
        JWKSet jwkSet = new JWKSet(rsaKey);
        return new ImmutableJWKSet<>(jwkSet);
    }

    private static KeyPair generateRsaKey() {
        KeyPair keyPair;
        try {
            KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
            keyPairGenerator.initialize(2048);
            keyPair = keyPairGenerator.generateKeyPair();
        }
        catch (Exception ex) {
            throw new IllegalStateException(ex);
        }
        return keyPair;
    }

    @Bean
    public ProviderSettings providerSettings() {
        return ProviderSettings.builder().build();
    }

}
  • application.yml
    服務(wù)端口為 9000
    框架的異常信息不是很友好,此處增加了兩個類的 trace 日志,便于定位問題。
server:
  port: 9000

logging:
  level:
    root: info
#    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping: trace
#    org.springframework.security: debug
    org.springframework.security.web.FilterChainProxy: trace # 過濾器執(zhí)行順序
    org.springframework.security.web.access.ExceptionTranslationFilter: trace #異常處理

4. 啟動

運行 啟動類

5. 測試

授權(quán)碼 獲取令牌

1. 三方應(yīng)用訪問授權(quán)頁
http://localhost:9000/oauth2/authorize?response_type=code&client_id=messaging-client&scope=message.read&redirect_uri=https://cn.bing.com
1.1 若用戶未登錄,則會重定向登錄頁
輸入配置類中的指定的用戶信息 user、password,登錄,登錄成功后會重定向到授權(quán)頁
spring authorization server,Spring Authorization Server,Spring Security,spring security,oidc,oauth2

1.2. 授權(quán)頁
spring authorization server,Spring Authorization Server,Spring Security,spring security,oidc,oauth2
2. 用戶授權(quán)
勾選授權(quán)作用域scope(即message.read),點擊 Submit Consent 允許授權(quán)
3. 獲取code
spring authorization server,Spring Authorization Server,Spring Security,spring security,oidc,oauth2
授權(quán)成功后,會重定向到上述地址并攜帶 code
4. 通過 code 獲取令牌
使用postman發(fā)送請求 POST /oauth2/token,需要注意的是客戶端的信息以 Basic 方式認(rèn)證
spring authorization server,Spring Authorization Server,Spring Security,spring security,oidc,oauth2
填入上步驟獲取的 code
spring authorization server,Spring Authorization Server,Spring Security,spring security,oidc,oauth2
發(fā)送請求,得到響應(yīng),access_token 即為令牌。
spring authorization server,Spring Authorization Server,Spring Security,spring security,oidc,oauth2

刷新令牌

同樣是 POST /oauth2/token 接口,僅參數(shù)不同,客戶端的信息同樣以 Basic 方式認(rèn)證
使用上步驟獲取的 refresh_token 測試。
spring authorization server,Spring Authorization Server,Spring Security,spring security,oidc,oauth2

客戶端憑證 獲取令牌

同樣是 POST /oauth2/token 接口,僅參數(shù)不同,客戶端的信息同樣以 Basic 方式認(rèn)證
spring authorization server,Spring Authorization Server,Spring Security,spring security,oidc,oauth2


end

后續(xù)會繼續(xù)深挖框架的各種配置和功能,有興趣可以訂閱一下,會持續(xù)更新文章來源地址http://www.zghlxwxcb.cn/news/detail-569811.html

到了這里,關(guān)于【Spring Authorization Server 系列】(一)入門篇,快速搭建一個授權(quán)服務(wù)器的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Spring Authorization Server入門 (十六) Spring Cloud Gateway對接認(rèn)證服務(wù)

    Spring Authorization Server入門 (十六) Spring Cloud Gateway對接認(rèn)證服務(wù)

    ????????之前雖然單獨講過Security Client和Resource Server的對接,但是都是基于Spring webmvc的,Gateway這種非阻塞式的網(wǎng)關(guān)是基于webflux的,對于集成Security相關(guān)內(nèi)容略有不同,且涉及到代理其它微服務(wù),所以會稍微比較麻煩些,今天就帶大家來實現(xiàn)Gateway網(wǎng)關(guān)對接OAuth2認(rèn)證服務(wù)。

    2024年02月10日
    瀏覽(40)
  • Spring Authorization Server入門 (二十) 實現(xiàn)二維碼掃碼登錄

    Spring Authorization Server入門 (二十) 實現(xiàn)二維碼掃碼登錄

    打開網(wǎng)頁,發(fā)起授權(quán)申請/未登錄被重定向到登錄頁面 選擇二維碼登錄,頁面從后端請求二維碼 頁面渲染二維碼圖片,并輪詢請求,獲取二維碼的狀態(tài) 事先登錄過APP的手機掃描二維碼,然后APP請求服務(wù)器端的API接口,把用戶認(rèn)證信息傳遞到服務(wù)器中 后端收到APP的請求后更改

    2024年02月21日
    瀏覽(23)
  • Spring Authorization Server入門 (十五) 分離授權(quán)確認(rèn)與設(shè)備碼校驗頁面

    2023-12-01修改:在session-data-redis(Github)分支中添加了基于 spring-session-data-redis 的實現(xiàn),無需借助 nonceId 來保持認(rèn)證狀態(tài),該分支已去除所有 nonceId 相關(guān)內(nèi)容,需要注意的是 axios 在初始化時需要添加配置 withCredentials: true ,讓請求攜帶cookie。當(dāng)然一些響應(yīng)json的處理還是使用下方的

    2024年02月14日
    瀏覽(18)
  • Spring Authorization Server入門 (一) 初識SpringAuthorizationServer和OAuth2.1協(xié)議

    Spring Authorization Server入門 (一) 初識SpringAuthorizationServer和OAuth2.1協(xié)議

    經(jīng)過近些年網(wǎng)絡(luò)和設(shè)備的不斷發(fā)展,之前的oauth2.0發(fā)布的授權(quán)協(xié)議標(biāo)準(zhǔn)已經(jīng)遠(yuǎn)遠(yuǎn)不能滿足現(xiàn)在的場景和需求,根據(jù)其安全最佳實踐,在oauth2.0的基礎(chǔ)上移除了一些不安全的授權(quán)方式,并且對擴展協(xié)議進行整合。該協(xié)議定義了一系列關(guān)于授權(quán)的開放網(wǎng)絡(luò)標(biāo)準(zhǔn),允許用戶授權(quán)第三方

    2024年02月11日
    瀏覽(23)
  • Spring Authorization Server入門 (十二) 實現(xiàn)授權(quán)碼模式使用前后端分離的登錄頁面

    Spring Authorization Server入門 (十二) 實現(xiàn)授權(quán)碼模式使用前后端分離的登錄頁面

    2023-12-01修改:在session-data-redis(Github)分支中添加了基于 spring-session-data-redis 的實現(xiàn),無需借助 nonceId 來保持認(rèn)證狀態(tài),該分支已去除所有 nonceId 相關(guān)內(nèi)容,需要注意的是 axios 在初始化時需要添加配置 withCredentials: true ,讓請求攜帶cookie。當(dāng)然一些響應(yīng)json的處理還是使用下方的

    2024年02月13日
    瀏覽(25)
  • OAuth2.0 實踐 Spring Authorization Server 搭建授權(quán)服務(wù)器 + Resource + Client

    OAuth2.0 實踐 Spring Authorization Server 搭建授權(quán)服務(wù)器 + Resource + Client

    title: OAuth2.0 實踐 Spring Authorization Server 搭建授權(quán)服務(wù)器 + Resource + Client date: 2023-03-27 01:41:26 tags: OAuth2.0 Spring Authorization Server categories: 開發(fā)實踐 cover: https://cover.png feature: false 目前 Spring 生態(tài)中的 OAuth2 授權(quán)服務(wù)器是 Spring Authorization Server ,原先的 Spring Security OAuth 已經(jīng)停止更新

    2024年02月08日
    瀏覽(22)
  • Spring Authorization Server入門 (三) 集成流程說明、細(xì)節(jié)補充和各種方式獲取token測試

    Spring Authorization Server入門 (三) 集成流程說明、細(xì)節(jié)補充和各種方式獲取token測試

    在上一篇文章中的AuthorizationConfig.java配置類中,類上有三個注解,分別是@Configuration、@EnableWebSecurity和@EnableMethodSecurity注解,雖然在類中有注釋,但是這里在細(xì)講一下,同時放一下官網(wǎng)的說明 @EnableWebSecurity 加載了WebSecurityConfiguration配置類, 配置安全認(rèn)證策略。 加載了Authenti

    2024年02月11日
    瀏覽(21)
  • Spring Authorization Server入門 (八) Spring Boot引入Security OAuth2 Client對接認(rèn)證服務(wù)

    Spring Authorization Server入門 (八) Spring Boot引入Security OAuth2 Client對接認(rèn)證服務(wù)

    在之前的文章中實現(xiàn)了一個認(rèn)證服務(wù),并且添加了一些自定義的內(nèi)容,現(xiàn)在暫時沒想到認(rèn)證服務(wù)的新內(nèi)容,本篇文章就先寫一下客戶端對接的吧,水一篇。 當(dāng)用戶通過客戶端去訪問一個受限的資源時,客戶端會檢測是否有登錄信息,沒有登錄信息會重定向至認(rèn)證服務(wù)器去請求

    2024年02月21日
    瀏覽(28)
  • Spring Authorization Server入門 (十三) 實現(xiàn)聯(lián)合身份認(rèn)證,集成Github與Gitee的OAuth登錄

    Spring Authorization Server入門 (十三) 實現(xiàn)聯(lián)合身份認(rèn)證,集成Github與Gitee的OAuth登錄

    什么是聯(lián)合身份認(rèn)證? ??????通過Spring Security OAuth2 Client(Login)模塊集成第三方登錄至自己的認(rèn)證服務(wù)中,使用聯(lián)合身份認(rèn)證只需要請求認(rèn)證服務(wù),不通過前端來跳轉(zhuǎn)三方的授權(quán)申請鏈接,而是統(tǒng)一通過認(rèn)證服務(wù)來跳轉(zhuǎn),只需要維護Spring Authorization Server中身份認(rèn)證提供商

    2024年02月05日
    瀏覽(42)
  • Spring Authorization Server 授權(quán)服務(wù)器

    Spring Authorization Server 遵循Oauth2.1和OpenID Connect 1.0,它建立在 Spring Security 之上。 要求JDK11以上 使用Idea創(chuàng)建一個Maven的Spring Boot(筆者使用的是 spring boot 2.7 )項目 pom需要引入 Authorization Server的配置 完整的pom.xml文件如下: 使用 @Bean 和 @Configuration 創(chuàng)建配置,這是官方推薦的最小配

    2024年02月16日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包