最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot集成OAuth2.0的實現(xiàn)示例

 更新時間:2025年06月20日 11:11:34   作者:珠峰日記  
OAuth2.0是安全授權協(xié)議,通過訪問令牌替代密碼,保障用戶數據安全,適用于社交登錄、第三方數據訪問等場景,下面就來介紹一下SpringBoot集成OAuth2.0,感興趣的可以了解一下

OAuth 2.0 介紹

概念

OAuth 2.0 是一個開放標準的授權協(xié)議,它允許用戶授權第三方應用訪問其在另一個服務提供商處存儲的受保護資源,而無需將自己的用戶名和密碼直接提供給第三方應用。這極大地增強了用戶數據的安全性和隱私性,廣泛應用于各種需要第三方授權訪問的場景,如社交登錄、第三方應用獲取用戶在云存儲服務中的文件等。

與傳統(tǒng)認證方式的對比

  • 傳統(tǒng)認證方式:通常要求用戶直接向第三方應用提供其在服務提供商處的用戶名和密碼,這存在密碼泄露的風險。一旦第三方應用的安全性出現(xiàn)問題,用戶的賬戶信息將面臨嚴重威脅。
  • OAuth 2.0:用戶只需在服務提供商的授權頁面上進行授權操作,第三方應用獲得的是訪問令牌(Access Token),而非用戶的原始憑據。即使令牌泄露,攻擊者也只能在令牌的有效期和權限范圍內訪問資源,且令牌可以被服務提供商隨時撤銷。

常見應用場景

  • 社交登錄:許多網站和應用允許用戶使用社交媒體賬號(如微信、QQ、微博、Google、Facebook 等)進行登錄。用戶無需在新平臺上注冊新賬號,只需授權平臺訪問其社交賬號的基本信息,即可快速完成登錄。
  • 第三方數據訪問:例如,一個健身應用可以請求用戶授權訪問其在運動追蹤服務提供商處的運動數據,以便為用戶提供更全面的健身分析和建議。
  • API 訪問:開發(fā)者在開發(fā)第三方應用時,需要調用某些服務提供商的 API 來獲取數據或執(zhí)行操作。通過 OAuth 2.0 授權,開發(fā)者可以在不暴露用戶敏感信息的情況下,合法地使用這些 API。

OAuth 2.0 原理

核心角色

  • 資源所有者(Resource Owner):一般是用戶,擁有受保護的資源,并有權決定是否授權第三方應用訪問這些資源。例如,用戶在 Facebook 上的個人信息和照片就是受保護資源,用戶可以決定是否允許某個第三方游戲應用訪問這些信息。
  • 資源服務器(Resource Server):存儲受保護資源的服務器。它負責驗證訪問令牌的有效性,并在驗證通過后向第三方應用提供相應的資源。例如,F(xiàn)acebook 的服務器存儲了用戶的個人信息和照片,當第三方應用攜帶有效的訪問令牌請求這些資源時,F(xiàn)acebook 的服務器會進行驗證并返回數據。
  • 客戶端(Client):即第三方應用,希望訪問用戶的受保護資源??蛻舳诵枰全@得用戶的授權,然后使用授權服務器頒發(fā)的訪問令牌來訪問資源服務器上的資源。例如,上述的第三方游戲應用就是客戶端。
  • 授權服務器(Authorization Server):負責驗證資源所有者的身份,處理授權請求,并發(fā)放訪問令牌。它與資源所有者進行交互,確認用戶是否同意授權給客戶端,并在用戶授權后生成并返回訪問令牌。例如,F(xiàn)acebook 的授權服務器會驗證用戶的身份,顯示授權頁面,當用戶點擊“同意”后,生成訪問令牌并返回給客戶端。

授權流程

OAuth 2.0 定義了四種授權模式,下面詳細介紹最常用的授權碼模式(Authorization Code Grant):

  • 客戶端請求授權:客戶端引導用戶到授權服務器的授權端點,請求用戶授權。請求中包含客戶端 ID、重定向 URI、請求的權限范圍等信息。例如,當用戶在第三方游戲應用中選擇使用 Facebook 賬號登錄時,應用會將用戶重定向到 Facebook 的授權頁面,并攜帶應用的客戶端 ID、指定的重定向 URI 以及請求的權限范圍(如獲取用戶的基本信息、好友列表等)。
  • 用戶授權:用戶在授權服務器的頁面上登錄并確認是否授權給客戶端訪問其資源。例如,用戶在 Facebook 的授權頁面上輸入自己的賬號密碼登錄后,會看到一個授權提示,顯示第三方應用請求的權限范圍,用戶可以選擇“同意”或“拒絕”。
  • 授權服務器返回授權碼:如果用戶授權,授權服務器將用戶重定向回客戶端指定的重定向 URI,并附帶一個授權碼(Authorization Code)。授權碼是一個臨時的、一次性的代碼,用于后續(xù)換取訪問令牌。例如,用戶點擊“同意”后,F(xiàn)acebook 的授權服務器會將用戶重定向回第三方游戲應用指定的重定向 URI,并在 URL 中附帶授權碼。
  • 客戶端換取訪問令牌:客戶端使用接收到的授權碼向授權服務器的令牌端點發(fā)送請求,同時提供客戶端 ID 和客戶端密鑰進行身份驗證。授權服務器驗證通過后,返回訪問令牌(Access Token)和可選的刷新令牌(Refresh Token)。例如,第三方游戲應用接收到授權碼后,會向 Facebook 的令牌端點發(fā)送請求,攜帶授權碼、客戶端 ID 和客戶端密鑰,F(xiàn)acebook 的授權服務器驗證這些信息無誤后,會返回訪問令牌和可能的刷新令牌。
  • 客戶端訪問資源:客戶端使用訪問令牌向資源服務器發(fā)送請求,資源服務器驗證令牌的有效性,驗證通過后返回受保護的資源。例如,第三方游戲應用使用接收到的訪問令牌向 Facebook 的資源服務器請求用戶的基本信息,資源服務器驗證令牌有效后,會返回用戶的姓名、頭像等信息。

Spring Boot 集成 OAuth 2.0

1. 添加依賴

在 pom.xml 中添加以下依賴:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-oauth2-client</artifactId>
    </dependency>
</dependencies>

2. 配置 OAuth 2.0 客戶端

在 application.yml 中配置 OAuth 2.0 客戶端信息,以 GitHub 為例:

spring:
  security:
    oauth2:
      client:
        registration:
          github:
            client-id: your-client-id
            client-secret: your-client-secret
            scope: read:user
        provider:
          github:
            authorization-uri: https://github.com/login/oauth/authorize
            token-uri: https://github.com/login/oauth/access_token
            user-info-uri: https://api.github.com/user

將 your-client-id 和 your-client-secret 替換為你在 GitHub 開發(fā)者設置中創(chuàng)建的實際客戶端 ID 和客戶端密鑰。

3. 配置 Spring Security

創(chuàng)建一個配置類來配置 Spring Security 以支持 OAuth 2.0 登錄:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.web.SecurityFilterChain;

@Configuration
public class SecurityConfig {

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
           .authorizeRequests()
               .anyRequest().authenticated()
               .and()
           .oauth2Login();
        return http.build();
    }
}

4. 創(chuàng)建控制器

創(chuàng)建一個簡單的控制器來測試 OAuth 2.0 登錄后的訪問:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HomeController {

    @GetMapping("/")
    public String home() {
        return "Welcome to the protected area! You are authenticated.";
    }
}

5. 主應用類

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringBootOauth2DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringBootOauth2DemoApplication.class, args);
    }
}

代碼解釋

  • 依賴部分:添加了 spring-boot-starter-web 和 spring-boot-starter-oauth2-client 依賴,為項目提供 Web 服務和 OAuth 2.0 客戶端支持。
  • 配置文件:在 application.yml 中配置了 GitHub 的 OAuth 2.0 客戶端信息,包含客戶端 ID、客戶端密鑰、授權 URI、令牌 URI 以及用戶信息 URI 等。
  • SecurityConfig 類:對 Spring Security 進行配置,要求所有請求都需經過身份驗證,并啟用 OAuth 2.0 登錄。
  • HomeController 類:提供一個簡單的端點 /,只有經過身份驗證的用戶才能訪問。
  • 主應用類:啟動 Spring Boot 應用。

按照上述步驟操作,就能在 Spring Boot 項目中集成 OAuth 2.0 認證。啟動應用后,訪問項目根路徑,會自動跳轉到 GitHub 的授權頁面,授權成功后即可訪問受保護的資源。

到此這篇關于SpringBoot集成OAuth2.0的實現(xiàn)示例的文章就介紹到這了,更多相關SpringBoot OAuth2.0內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Reactor 多任務并發(fā)執(zhí)行且結果按順序返回第一個

    Reactor 多任務并發(fā)執(zhí)行且結果按順序返回第一個

    這篇文章主要介紹了Reactor 多任務并發(fā)執(zhí)行且結果按順序返回第一個,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,感興趣的小伙伴可以參考一下
    2022-09-09
  • intellij idea 啟動tomcat 1099端口被占用的解決

    intellij idea 啟動tomcat 1099端口被占用的解決

    這篇文章主要介紹了intellij idea 啟動tomcat 1099端口被占用的解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09
  • Feign調用服務時丟失Cookie和Header信息的解決方案

    Feign調用服務時丟失Cookie和Header信息的解決方案

    這篇文章主要介紹了Feign調用服務時丟失Cookie和Header信息的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • java調用FFmpeg實現(xiàn)視屏壓縮功能的詳細步驟

    java調用FFmpeg實現(xiàn)視屏壓縮功能的詳細步驟

    這篇文章主要介紹了java調用FFmpeg實現(xiàn)視屏壓縮功能,本文簡單的展示了java調用FFmpeg命令實現(xiàn)視屏的壓縮的詳細步驟,需要的朋友可以參考下
    2021-09-09
  • Spring Boot 常用注解整理(最全收藏版)

    Spring Boot 常用注解整理(最全收藏版)

    本文系統(tǒng)整理了常用的 Spring/Spring Boot 注解,按照功能分類進行介紹,每個注解都會涵蓋其含義、提供來源、應用場景以及代碼示例,幫助開發(fā)者深入理解和快速檢索,感興趣的朋友跟隨小編一起看看吧
    2025-05-05
  • 淺談Spring Boot 屬性配置和自定義屬性配置

    淺談Spring Boot 屬性配置和自定義屬性配置

    這篇文章主要介紹了淺談Spring Boot 屬性配置和自定義屬性配置,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • spring mvc4中相關注解的詳細講解教程

    spring mvc4中相關注解的詳細講解教程

    這篇文章主要給大家介紹了關于spring mvc4中相關注解的相關資料,其中詳細介紹了關于@Controller、@RequestMapping、@RathVariable、@RequestParam及@RequestBody等等注解的相關內容,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-06-06
  • springboot配置多數據源(靜態(tài)和動態(tài)數據源)

    springboot配置多數據源(靜態(tài)和動態(tài)數據源)

    在開發(fā)過程中,很多時候都會有垮數據庫操作數據的情況,需要同時配置多套數據源,本文主要介紹了springboot配置多數據源(靜態(tài)和動態(tài)數據源),感興趣的可以了解一下
    2023-09-09
  • 基于AspectJ注解方式實現(xiàn)AOP

    基于AspectJ注解方式實現(xiàn)AOP

    這篇文章主要介紹了基于AspectJ注解方式實現(xiàn)AOP,使用AspectJ的注解可以更方便地編寫和管理切面邏輯,而Spring AOP也是使用了AspectJ提供的注解來實現(xiàn)切面編程,需要的朋友可以參考下
    2023-09-09
  • 解析Java格式字符串的使用

    解析Java格式字符串的使用

    本文通過實例給大家介紹了java格式字符串的使用,代碼簡單易懂,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2022-02-02

最新評論

三原县| 乌兰浩特市| 定远县| 南康市| 防城港市| 通山县| 日土县| 常山县| 进贤县| 罗田县| 昆山市| 咸丰县| 乐山市| 米脂县| 黎平县| 永善县| 天峻县| 榆中县| 什邡市| 商河县| 仪征市| 台湾省| 来凤县| 宁化县| 天津市| 萨迦县| 万安县| 山阴县| 英山县| 洛南县| 宁城县| 资兴市| 温泉县| 广水市| 两当县| 丰县| 西和县| 洞头县| 枣阳市| 贡山| 江达县|