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

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

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

OAuth 2.0 介紹

概念

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

與傳統(tǒng)認(rèn)證方式的對(duì)比

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

常見應(yīng)用場(chǎng)景

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

OAuth 2.0 原理

核心角色

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

授權(quán)流程

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

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

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ā)者設(shè)置中創(chuàng)建的實(shí)際客戶端 ID 和客戶端密鑰。

3. 配置 Spring Security

創(chuàng)建一個(gè)配置類來(lái)配置 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)建一個(gè)簡(jiǎn)單的控制器來(lái)測(cè)試 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. 主應(yīng)用類

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 依賴,為項(xiàng)目提供 Web 服務(wù)和 OAuth 2.0 客戶端支持。
  • 配置文件:在 application.yml 中配置了 GitHub 的 OAuth 2.0 客戶端信息,包含客戶端 ID、客戶端密鑰、授權(quán) URI、令牌 URI 以及用戶信息 URI 等。
  • SecurityConfig 類:對(duì) Spring Security 進(jìn)行配置,要求所有請(qǐng)求都需經(jīng)過(guò)身份驗(yàn)證,并啟用 OAuth 2.0 登錄。
  • HomeController 類:提供一個(gè)簡(jiǎn)單的端點(diǎn) /,只有經(jīng)過(guò)身份驗(yàn)證的用戶才能訪問。
  • 主應(yīng)用類:?jiǎn)?dòng) Spring Boot 應(yīng)用。

按照上述步驟操作,就能在 Spring Boot 項(xiàng)目中集成 OAuth 2.0 認(rèn)證。啟動(dòng)應(yīng)用后,訪問項(xiàng)目根路徑,會(huì)自動(dòng)跳轉(zhuǎn)到 GitHub 的授權(quán)頁(yè)面,授權(quán)成功后即可訪問受保護(hù)的資源。

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

相關(guān)文章

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

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

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

    intellij idea 啟動(dòng)tomcat 1099端口被占用的解決

    這篇文章主要介紹了intellij idea 啟動(dòng)tomcat 1099端口被占用的解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Feign調(diào)用服務(wù)時(shí)丟失Cookie和Header信息的解決方案

    Feign調(diào)用服務(wù)時(shí)丟失Cookie和Header信息的解決方案

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

    java調(diào)用FFmpeg實(shí)現(xiàn)視屏壓縮功能的詳細(xì)步驟

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

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

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

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

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

    spring mvc4中相關(guān)注解的詳細(xì)講解教程

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

    springboot配置多數(shù)據(jù)源(靜態(tài)和動(dòng)態(tài)數(shù)據(jù)源)

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

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

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

    解析Java格式字符串的使用

    本文通過(guò)實(shí)例給大家介紹了java格式字符串的使用,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2022-02-02

最新評(píng)論

西乡县| 蓝山县| 山丹县| 朝阳市| 二连浩特市| 佛坪县| 蒙阴县| 合作市| 耒阳市| 峨边| 福鼎市| 和林格尔县| 舟曲县| 徐汇区| 三亚市| 新巴尔虎右旗| 永嘉县| 广南县| 平湖市| 吉安市| 化州市| 景泰县| 陈巴尔虎旗| 临朐县| 恩施市| 微山县| 西平县| 绥宁县| 洞口县| 浦城县| 东乡县| 松溪县| 宁海县| 广水市| 安福县| 辽阳市| 青铜峡市| 晋中市| 红河县| 重庆市| 满洲里市|