色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

什么是oauth協議

科技綠洲 ? 來源:Java技術指北 ? 作者:Java技術指北 ? 2023-10-08 11:39 ? 次閱讀

本篇文章讓我帶你認識一下什么是oauth協議

什么是 oauth協議 ?

百度百科上解釋:允許用戶提供一個令牌,而不是用戶名和密碼來訪問他們存放在特定服務提供者的數據。每一個令牌授權一個特定的網站(例如,視頻編輯網站)在特定的時段(例如,接下來的2小時內)內訪問特定的資源(例如僅僅是某一相冊中的視頻)。這樣,OAuth允許用戶授權第三方網站訪問他們存儲在另外的服務提供者上的信息,而不需要分享他們的訪問許可或他們數據的所有內容。

簡單的來講就是一個令牌,這個令牌可以有一定的權限,在不知道用戶密碼的情況下也可以進行部分的功功能操作。用一個例子幫助理解:一個甲方公司,公司里面使用一卡通,這張卡可以門禁,食堂,等等,公司招了外包進來,外包只能開通門禁就行,其他的權限是沒有的。這時候公司就不會給一張正式員工的卡,而是外包的卡,正編員工卡就是用戶的賬號密碼,這個外包卡就相當于是一個令牌,并且可能公司會給你的外包卡設置一個有效期,等有效期快到的時候有需要申請延期。這個就相當于是oauth協議模式。用戶不會給你用戶名和密碼,那樣相當于放開了所有的權限,而會給你提供一個令牌,在有效期類可以訪問特定的功能服務 使用令牌的優點:

  • 令牌是短期的,到期會自動失效,用戶自己無法修改。密碼一般長期有效,用戶不修改,就不會發生變化。
  • 令牌可以被數據所有者撤銷,會立即失效。
  • 令牌有權限范圍(scope),對于網絡服務來說,只讀令牌就比讀寫令牌更安全。密碼一般是完整權限

oauth協議有四種模式;

1、授權碼模式 2、隱藏式 3、密碼式 4、客戶端憑證 其中授權碼方式是最常用的流程,安全性也最高,今天我們就來著重講一下授權碼模式。 授權碼模式: 指的是第三方應用先申請一個授權碼,然后再用該碼獲取令牌,授權碼通過前端傳送,令牌則是儲存在后端,而且所有與資源服務器的通信都在后端完成。這樣的前后端分離,可以避免令牌泄漏。

授權碼模式主要分為幾個步驟

以甲方公司員工卡系統(SelfResearch.com)和外包公司員工卡系統(outsource.com)為例,下面是授權碼模式的流程圖片

請求授權碼

首先,甲方公司給外包員工方提供一個授權鏈接,外包員工點擊連接,申請授權碼,連接參數如下所示

https://SelfResearch.com/oauth/authorize?response_type=code&client_id=CLIENT_ID&redirect_uri=CALLBACK_URL&scope=read

response_type參數表示要求返回授權碼(code), client_id參數讓 甲方 知道是誰在請求, redirect_uri參數是 甲方系統 接受或拒絕請求后的跳轉網址, scope參數表示要求的授權范圍(這里是只讀)。

返回授權碼

用戶跳轉到這個之后,甲方公司會先要求用戶登錄,然后請求授權,如果同意就跳轉到redirect_uri這個參數的地址,并返回授權碼

https://SelfResearch.com/callback?code=AUTHORIZATION_CODE

code就是表示授權碼

請求令牌

外包員工拿著授權碼去請求令牌

https://SelfResearch.com/oauth/token?client_id=CLIENT_ID&client_secret=CLIENT_SECRET&grant_type=authorization_code&code=AUTHORIZATION_CODE&redirect_uri=CALLBACK_URL

  • client_id參數和client_secret參數用來讓 甲方公司 確認 外包員工 的身份(client_secret參數是保密的,因此只能在后端發請求)。
  • grant_type參數的值是AUTHORIZATION_CODE,表示采用的授權方式是授權碼。
  • code參數是上一步拿到的授權碼。
  • redirect_uri參數是令牌頒發后的回調網址。

返回令牌 外包員工訪問redirect_uri會得到一串json數據:

{
    "access_token": "67c4051b-36c8-11ec-af33-00163e0808bf",
    "token_type": "bearer",
    "refresh_token": "71975ccc-36c8-11ec-af33-cfd2826915e5",
    "expires_in": 3249,
    "scope": "read"

access_token就是令牌了,用戶需要訪問其他接口就需要帶上這個token去訪問了 refresh_token這個是刷新令牌,如果需要使用新的token,就需要通過這個刷新令牌來獲取最新的access_token。

實現 oauth2,可以分為三個步驟

  • 認證服務
  • 資源服務
  • 第三方服務

現在第三方用戶(test9527)想去訪問資源中的部分功能(接口),但是改功能只有User角色才能訪問,需要先通過認證服務器獲取user的授權碼,然后拿著這個code和自己賬號信息去獲取token,并校驗通過之后才能訪問到資源服務器,也就是第三方用戶通過 test9527 可以訪問本來需要user權限才能訪問的資源功能(接口)

實現步驟:

創建三個服務oauth-server(認證服務)、resource-server(資源服務)、third-server(第三方服務

圖片

maven依賴

< !--    oauth2    -- >
< dependency >
    < groupId >org.springframework.security.oauth< /groupId >
    < artifactId >spring-security-oauth2< /artifactId >
    < version >2.1.3.RELEASE< /version >
< /dependency >
< !--    spring security-- >
< dependency >
    < groupId >org.springframework.boot< /groupId >
    < artifactId >spring-boot-starter-security< /artifactId >
< /dependency >

oauth-server 服務配置文件

/**
 * 模擬第三方授權配置
 */
@EnableAuthorizationServer
@Configuration
public class AuthConfig extends AuthorizationServerConfigurerAdapter {

    @Resource
    ClientDetailsService clientDetailsService;

    /**
     * 資源服務器校驗Token
     */
    @Override
    public void configure(AuthorizationServerSecurityConfigurer security) {
        security.checkTokenAccess("permitAll()").allowFormAuthenticationForClients();
    }
    /**
     * 第三方客戶端請求配置,和資源服務訪問的配置,不設置默認都可以訪問,提供默認回調地址
     */
    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        clients.inMemory()
                //第三方用戶
                .withClient("test9527")
                .secret(new BCryptPasswordEncoder().encode("test9527"))
                .resourceIds("resource")
                //認證模式
                .authorizedGrantTypes("authorization_code","refresh_token")
                .scopes("all")
                //回調地址
                .redirectUris("http://localhost:8082/notify.html");
    }
    /**
     * 配置訪問端點
     */
    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) {
        endpoints.authorizationCodeServices(authorizationCodeServices()).tokenServices(tokenServices());
    }
    /**
     * 內存管理
     */
    @Bean
    AuthorizationCodeServices authorizationCodeServices() {
        return new InMemoryAuthorizationCodeServices();
    }
    /**
     * Token管理規則
     */
    @Bean
    AuthorizationServerTokenServices tokenServices() {
        DefaultTokenServices services = new DefaultTokenServices();
        services.setClientDetailsService(clientDetailsService);
        services.setSupportRefreshToken(true);
        services.setTokenStore(tokenStore());
        services.setAccessTokenValiditySeconds(3600);
        services.setRefreshTokenValiditySeconds(3600*7);
        return services;
    }
    @Bean
    TokenStore tokenStore() {
        return new InMemoryTokenStore();
    }

配置spring security

/**
 * 模擬本地用戶配置
 */
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    /**
     * 密碼加密方式
     */
    @Bean
    public PasswordEncoder passwordEncoder(){
        return new BCryptPasswordEncoder();
    }
    /**
     * 內存中虛擬用戶和角色
     */
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
                .withUser("user")
                .password(new BCryptPasswordEncoder().encode("123456"))
                .roles("user");
    }
    /**
     * 表單登錄
     */
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable().formLogin();
    }
}

resource-server配置

/**
 * 資源服務管理配置
 */
@Configuration
@EnableResourceServer
public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
    /**
     * Token令牌校驗
     */
    @Bean
    RemoteTokenServices tokenServices() {
        RemoteTokenServices services = new RemoteTokenServices();
        services.setCheckTokenEndpointUrl("http://localhost:8080/oauth/check_token");
        services.setClientId("test9527");
        services.setClientSecret("test9527");
        return services;
    }
    /**
     * 服務資源ID配置
     */
    @Override
    public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
        resources.resourceId("resource").tokenServices(tokenServices());
    }
    /**
     * 模擬用戶權限規則
     */
    @Override
    public void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                           //訪問user下的路徑需要user角色
                .antMatchers("/user/**").hasRole("user")
                .anyRequest().authenticated();
    }

resource下的功能(接口)

圖片

第三方服務首先認證,獲取授權碼code http://localhost:8080/oauth/authorize?client_id=test9527&response_type=code&scope=all&redirect_uri=http://localhost:8082/notify.html

此時會到認證服務器中的user認證

圖片

此時需要user用戶同意授權,當認證服務中的user用戶同意之后,到如下頁面,此時看接口可以知道已經拿到code授權碼,并跳轉到我們需要跳轉的地址

redirect_uri=http://localhost:8082/notify.html

圖片

拿到授權碼之后訪問回調地址 http://localhost:8082/notify.html?code=Rs067L 然后通過code,client_id,client_secret 等參數訪問獲取令牌地址 https://SelfResearch.com/oauth/token?client_id=CLIENT_ID&client_secret=CLIENT_SECRET&grant_type=authorization_code&code=SMD5nj&redirect_uri=redirect_uri=http://localhost:8082/notify.html 成功之后會返回token,刷新token,以及token有效時間,如下圖片

拿到token之后,我們再去訪問資源服務器,此時就能順利訪問到功能(接口)了

圖片

最終效果,最終第三方用戶test9527訪問當了資源服務器功

圖片

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據
    +關注

    關注

    8

    文章

    7134

    瀏覽量

    89393
  • 參數
    +關注

    關注

    11

    文章

    1859

    瀏覽量

    32383
收藏 人收藏

    評論

    相關推薦

    linxu網絡協議分析:IP協議、TCP協議、UDP協議

    本章節主要介紹linxu網絡模型、以及常用的網絡協議分析以太網協議、IP協議、TCP協議、UDP協議 一、網絡模型 TCP/IP分層模型的四
    的頭像 發表于 10-28 16:44 ?3836次閱讀
    linxu網絡<b class='flag-5'>協議</b>分析:IP<b class='flag-5'>協議</b>、TCP<b class='flag-5'>協議</b>、UDP<b class='flag-5'>協議</b>

    #硬聲創作季 06-JAVAEE實戰項目課程—OAUTH2認證-OAuth2協議流程

    JAVA編程語言
    Mr_haohao
    發布于 :2022年09月04日 21:13:42

    跟著小狂玩天貓精靈智能設備對接--服務器篇(二)

    的一段,就是OAuth2.0第三方授權服務器的搭建,然后再來個小菜MySQL數據庫的安裝,這兩個東西一旦完成,那么就剩協議對接了,在這片文章中我們把服務器搭建完成,然后下一篇講具體的協議怎么對接最后一篇講
    發表于 12-12 13:33

    K8s 從懵圈到熟練 – 鏡像拉取這件小事

    應用都會遇到的一個一般性場景。私有鏡像拉取其實也是這個場景。這里的鏡像倉庫,就跟網盤一樣,是資源服務器,而容器集群則是三方服務,它需要訪問鏡像倉庫獲取鏡像。理解 OAuth 2.0 協議OAuth
    發表于 10-14 15:38

    協議是什么 協議棧又是什么

    協議定義的是一系列的通信標準, 通信雙方需要共同按照這一標準進行正常的數據收發;信的雙方需要共同按照這一個標準進行正常的數據收發;(兩人,說共同的語言,不然不能交流,一個聽不懂外語的和說外語的交流
    發表于 08-05 07:00

    如何使用ESP8266作為簡單頁面的網絡服務器來生成OAuth代碼以批準設備并生成刷新令牌和訪問令牌?

    尋找一些幫助來實現這個項目的一個版本。我使用 ESP8266 作為簡單頁面的網絡服務器來生成 OAuth 代碼以批準設備并生成刷新令牌和訪問令牌。 一切正常,直到我到達與谷歌服務器的實際連接點。我
    發表于 05-19 12:41

    OSPF協議,OSPF協議是什么意思

    OSPF協議,OSPF協議是什么意思 OSPF協議  OSPF(Open Shortest Path First)是一個內部網關協議(Interior Gateway Protoco
    發表于 03-29 17:27 ?4637次閱讀

    SIP協議,什么是SIP協議

    SIP協議,什么是SIP協議 SIP協議是NGN中的重要協議,越來越得到業界的重視。 一、SIP協議的背景和功能 SIP( 會話初
    發表于 04-07 16:12 ?2329次閱讀

    V-CHARGE的V2I通訊系統由德國TU Braunschweig大學完成設計

    V-CHARGE為解決第一個問題選用了OAuth 2.0通訊協議OAuth2.0是OAuth協議的延續版本,但不向后兼容
    的頭像 發表于 07-31 16:23 ?4985次閱讀
    V-CHARGE的V2I通訊系統由德國TU Braunschweig大學完成設計

    OAuth2-Server OAuth 2.0授權服務器的實現

    ./oschina_soft/oauth2-server.zip
    發表于 06-30 09:19 ?0次下載
    <b class='flag-5'>OAuth</b>2-Server <b class='flag-5'>OAuth</b> 2.0授權服務器的實現

    六款開源項目推薦

    現在大部分的網絡應用,登錄、注冊、密碼加密保存、token 管理等功能都是必要的。為了讓用戶的隱私更能得到保障,使用起來更方便,OAuth 協議和單點登錄系統也就應運而生。今天推薦的六款開源項目就是針對開發者的此類需求,通過學習開源項目,來讓自己的技術更精進。
    的頭像 發表于 07-12 15:15 ?3128次閱讀

    SSO單點登錄和OAuth2.0的區別和理解

    兩者有很多相似之處,下面我們來解釋一下這個過程。先來講解SSO,通過SSO對比OAuth2.0,才比較好理解OAuth2.0的原理。SSO的實現有很多框架,比如CAS框架,以下是CAS框架的官方流程圖。特別注意:SSO是一種思想,而CAS只是實現這種思想的一種框架而已
    的頭像 發表于 11-07 11:41 ?736次閱讀

    什么是單點登錄?解讀單點登錄兩個協議:SAML、OAuth2

    解單點登錄 (SSO) 和 SSO 廣泛使用的兩種協議,即 SAML 和OAuth2。這是任何程序員都需要理解的復雜領域之一。 什么是單點登錄? 單點登錄 (SSO) 是用戶可以使用一組憑據
    的頭像 發表于 11-14 14:44 ?3649次閱讀

    Spring Boot 3.1 中如何整合Spring Security和Keycloak

    雖然Keycloak 團隊宣布了不再對Spring Security提供適配,但Spring Security長期以來一直為OAuth和OIDC提供強大的內置支持。所以,只要我們理解Spring Security是如何處理OAuth和OIDC的,那么與Keyloak的集成
    的頭像 發表于 06-08 14:54 ?1195次閱讀
    Spring Boot 3.1 中如何整合Spring Security和Keycloak

    Java微服務中如何確保安全性?

    訪問資源,而OpenID Connect提供了基于OAuth2的身份驗證協議。 利用Spring Security OAuth2進行配置,實現統一的身份驗證和授權。 服務間安全通信: 通過配置TLS
    的頭像 發表于 01-02 15:21 ?137次閱讀
    主站蜘蛛池模板: 最近中文字幕高清中文字幕MV | 成 人 免费 黄 色 网站无毒下载 | 久久精品视在线观看2 | 国产精品久AAAAA片 | 国产亚洲精品字幕在线观看 | 精品久久久久久综合网 | 一本道高清不卡v免费费 | 欧亚一卡二卡日本一卡二卡 | 国产亚洲色婷婷久久精品99 | 快乐激情网 | 99riav9 精品香蕉免费大视频 | 欧美成人中文字幕在线看 | 精品午夜久久影视 | 亚洲伊人情人综合网站 | 欧美日韩精品久久久免费观看 | 久久re这里视频精品8 | 99久久爱re热6在线播放 | 久久学生精品国产自在拍 | 4484在线观看视频 | 捏奶动态图吃奶动态图q | 日本亚欧热亚洲乱色视频 | 男女牲交全过程免费播放 | 国产女合集小岁9三部 | 在线va无卡无码高清 | 久久亚洲精品专区蓝色区 | 91香蕉福利一区二区三区 | 成人在免费观看视频国产 | 热热久久这里只有精品 | 日本高清不卡一区久久精品 | 最新国产精品福利2020 | 国产精品av免费观看 | 中文字幕一区中文亚洲 | 黄色三级三级免费看 | 男男女女爽爽爽视频免费 | 99国产这里只有精品视频 | 夜里18款禁用的免费B站动漫 | 久草在线精彩免费视频 | 无码国产精品高潮久久9 | 曰本aaaaa毛片午夜网站 | 乌克兰xxxxx 乌克兰18性hd | 色婷婷AV国产精品欧美毛片 |