亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

OAuth 2.0 介紹

概念

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

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

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

常見應(yīng)用場景

  • 社交登錄:許多網(wǎng)站和應(yīng)用允許用戶使用社交媒體賬號(如微信、QQ、微博、Google、Facebook 等)進(jìn)行登錄。用戶無需在新平臺上注冊新賬號,只需授權(quán)平臺訪問其社交賬號的基本信息,即可快速完成登錄。
  • 第三方數(shù)據(jù)訪問:例如,一個(gè)健身應(yīng)用可以請求用戶授權(quán)訪問其在運(yùn)動(dòng)追蹤服務(wù)提供商處的運(yùn)動(dòng)數(shù)據(jù),以便為用戶提供更全面的健身分析和建議。
  • API 訪問:開發(fā)者在開發(fā)第三方應(yīng)用時(shí),需要調(diào)用某些服務(wù)提供商的 API 來獲取數(shù)據(jù)或執(zhí)行操作。通過 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):存儲受保護(hù)資源的服務(wù)器。它負(fù)責(zé)驗(yàn)證訪問令牌的有效性,并在驗(yàn)證通過后向第三方應(yīng)用提供相應(yīng)的資源。例如,F(xiàn)acebook 的服務(wù)器存儲了用戶的個(gè)人信息和照片,當(dāng)?shù)谌綉?yīng)用攜帶有效的訪問令牌請求這些資源時(shí),F(xiàn)acebook 的服務(wù)器會進(jìn)行驗(yàn)證并返回?cái)?shù)據(jù)。
  • 客戶端(Client):即第三方應(yīng)用,希望訪問用戶的受保護(hù)資源??蛻舳诵枰全@得用戶的授權(quán),然后使用授權(quán)服務(wù)器頒發(fā)的訪問令牌來訪問資源服務(wù)器上的資源。例如,上述的第三方游戲應(yīng)用就是客戶端。
  • 授權(quán)服務(wù)器(Authorization Server):負(fù)責(zé)驗(yàn)證資源所有者的身份,處理授權(quán)請求,并發(fā)放訪問令牌。它與資源所有者進(jìn)行交互,確認(rèn)用戶是否同意授權(quán)給客戶端,并在用戶授權(quán)后生成并返回訪問令牌。例如,F(xiàn)acebook 的授權(quán)服務(wù)器會驗(yàn)證用戶的身份,顯示授權(quán)頁面,當(dāng)用戶點(diǎn)擊“同意”后,生成訪問令牌并返回給客戶端。

授權(quán)流程

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

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

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è)配置類來配置 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è)簡單的控制器來測試 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 類:對 Spring Security 進(jìn)行配置,要求所有請求都需經(jīng)過身份驗(yàn)證,并啟用 OAuth 2.0 登錄。
  • HomeController 類:提供一個(gè)簡單的端點(diǎn) /,只有經(jīng)過身份驗(yàn)證的用戶才能訪問。
  • 主應(yīng)用類:啟動(dòng) Spring Boot 應(yīng)用。

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

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

相關(guān)文章

  • Java實(shí)現(xiàn)高效批量讀取Redis數(shù)據(jù)

    Java實(shí)現(xiàn)高效批量讀取Redis數(shù)據(jù)

    這篇文章主要為大家詳細(xì)介紹了如何使用Java實(shí)現(xiàn)高效批量讀取Redis數(shù)據(jù)功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-06-06
  • cookie+mybatis+servlet實(shí)現(xiàn)免登錄時(shí)長兩天半的整體流程

    cookie+mybatis+servlet實(shí)現(xiàn)免登錄時(shí)長兩天半的整體流程

    這篇文章主要介紹了cookie+mybatis+servlet實(shí)現(xiàn)免登錄時(shí)長兩天半,主要用到的技術(shù)有session、cookie、轉(zhuǎn)發(fā)、重定向、filter、和servlet,最重要的還是具體的來運(yùn)用它們在前端頁面真正的搭建出一個(gè)應(yīng)用,通過這個(gè)練習(xí),對我們所學(xué)的web知識做一個(gè)整合,需要的朋友可以參考下
    2022-10-10
  • springboot攔截器不攔截靜態(tài)資源,只攔截controller的實(shí)現(xiàn)方法

    springboot攔截器不攔截靜態(tài)資源,只攔截controller的實(shí)現(xiàn)方法

    這篇文章主要介紹了springboot攔截器不攔截靜態(tài)資源,只攔截controller的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Java線程公平鎖和非公平鎖的差異講解

    Java線程公平鎖和非公平鎖的差異講解

    今天小編就為大家分享一篇關(guān)于Java線程公平鎖和非公平鎖的差異講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Maven安裝和配置阿里云鏡像(解決加載慢)

    Maven安裝和配置阿里云鏡像(解決加載慢)

    本文介紹了Maven中配置阿里云鏡像以解決依賴加載慢的問題,包括安裝Maven、配置環(huán)境變量、在IDEA中配置Maven等內(nèi)容,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-11-11
  • 關(guān)于Java中修飾符的總結(jié)(fina除外)

    關(guān)于Java中修飾符的總結(jié)(fina除外)

    下面小編就為大家?guī)硪黄P(guān)于Java中修飾符的總結(jié)(fina除外)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-09-09
  • SpringBoot錯(cuò)誤提示400狀態(tài)問題

    SpringBoot錯(cuò)誤提示400狀態(tài)問題

    這篇文章主要介紹了SpringBoot錯(cuò)誤提示400狀態(tài)問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • java中常用注解@TableId的詳細(xì)解析

    java中常用注解@TableId的詳細(xì)解析

    @TableId注解是一種常見的Java注解,通常在使用關(guān)系型數(shù)據(jù)庫進(jìn)行對象關(guān)系映射(ORM)時(shí)使用,這篇文章主要介紹了java中常用注解@TableId的詳細(xì)解析,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-06-06
  • Springboot發(fā)送郵件功能的實(shí)現(xiàn)詳解

    Springboot發(fā)送郵件功能的實(shí)現(xiàn)詳解

    電子郵件是—種用電子手段提供信息交換的通信方式,是互聯(lián)網(wǎng)應(yīng)用最廣的服務(wù)。本文詳細(xì)為大家介紹了SpringBoot實(shí)現(xiàn)發(fā)送電子郵件功能的示例代碼,需要的可以參考一下
    2022-09-09
  • java變量的區(qū)別淺析

    java變量的區(qū)別淺析

    對于java的變量天天見到,但有時(shí)候別人問起它們的區(qū)別有時(shí)候也說不全,所以就找了些資料整理了整理...
    2013-12-12

最新評論