(十三)Java springcloud B2B2C o2o多用戶商城 springcloud架構(gòu) - SSO單點登錄之OAuth2.0 根據(jù)token獲取用戶信息(4)

    之前寫了很多關(guān)于spring cloud的文章,今天我們對OAuth2.0的整合方式做一下筆記,首先我從網(wǎng)上找了一些關(guān)于OAuth2.0的一些基礎(chǔ)知識點,幫助大家回顧一下知識點:
     
    一、oauth中的角色
    client:調(diào)用資源服務(wù)器API的應(yīng)用
    Oauth 2.0 Provider:包括Authorization Server和Resource Server
    (1)Authorization Server:認證服務(wù)器,進行認證和授權(quán)
    (2)Resource Server:資源服務(wù)器,保護受保護的資源
    user:資源的擁有者
    二、下面詳細介紹一下Oauth 2.0 Provider
    Authorization Server:
    (1)AuthorizationEndpoint:進行授權(quán)的服務(wù),Default URL: /oauth/authorize
    (2)TokenEndpoint:獲取token的服務(wù),Default URL: /oauth/token 
    Resource Server:
    OAuth2AuthenticationProcessingFilter:給帶有訪問令牌的請求加載認證
    三、下面再來詳細介紹一下Authorization Server:
    一般情況下,創(chuàng)建兩個配置類,一個繼承AuthorizationServerConfigurerAdapter,一個繼承WebSecurityConfigurerAdapter,再去復(fù)寫里面的方法。
    主要出現(xiàn)的兩種注解:
    1、@EnableAuthorizationServer:聲明一個認證服務(wù)器,當用此注解后,應(yīng)用啟動后將自動生成幾個Endpoint:(注:其實實現(xiàn)一個認證服務(wù)器就是這么簡單,加一個注解就搞定,當然真正用到生產(chǎn)環(huán)境還是要進行一些配置和復(fù)寫工作的。)
    /oauth/authorize:驗證
    /oauth/token:獲取token
    /oauth/confirm_access:用戶授權(quán)
    /oauth/error:認證失敗
    /oauth/check_token:資源服務(wù)器用來校驗token
    /oauth/token_key:如果jwt模式則可以用此來從認證服務(wù)器獲取公鑰
    以上這些endpoint都在源碼里的endpoint包里面。
    2、@Beans:需要實現(xiàn)AuthorizationServerConfigurer
    AuthorizationServerConfigurer包含三種配置:
    ClientDetailsServiceConfigurer:client客戶端的信息配置,client信息包括:clientId、secret、scope、authorizedGrantTypes、authorities
    (1)scope:表示權(quán)限范圍,可選項,用戶授權(quán)頁面時進行選擇
    (2)authorizedGrantTypes:有四種授權(quán)方式
    Authorization Code:用驗證獲取code,再用code去獲取token(用的較多的方式,也是較安全的方式)
    Implicit: 隱式授權(quán)模式
    Client Credentials (用來** App Access Token)
    Resource Owner Password Credentials
    (3)authorities:授予client的權(quán)限
    這里的具體實現(xiàn)有多種,in-memory、JdbcClientDetailsService、jwt等。
    AuthorizationServerSecurityConfigurer:聲明安全約束,哪些允許訪問,哪些不允許訪問
    AuthorizationServerEndpointsConfigurer:聲明授權(quán)和token的端點以及token的服務(wù)的一些配置信息,比如采用什么存儲方式、token的有效期等
     
    client的信息的讀取:在ClientDetailsServiceConfigurer類里面進行配置,可以有in-memory、jdbc等多種讀取方式。
    jdbc需要調(diào)用JdbcClientDetailsService類,此類需要傳入相應(yīng)的DataSource.
     
    下面再介紹一下如何管理token:
    AuthorizationServerTokenServices接口:聲明必要的關(guān)于token的操作
    (1)當token創(chuàng)建后,保存起來,以便之后的接受訪問令牌的資源可以引用它。
    (2)訪問令牌用來加載認證
    接口的實現(xiàn)也有多種,DefaultTokenServices是其默認實現(xiàn),他使用了默認的InMemoryTokenStore,不會持久化token;
     
    token存儲方式共有三種分別是:
    (1)InMemoryTokenStore:存放內(nèi)存中,不會持久化
    (2)JdbcTokenStore:存放數(shù)據(jù)庫中
    (3)Jwt: json web token
     
    授權(quán)類型:
    可以通過AuthorizationServerEndpointsConfigurer來進行配置,默認情況下,支持除了密碼外的所有授權(quán)類型。相關(guān)授權(quán)類型的一些類:
    (1)authenticationManager:直接注入一個AuthenticationManager,自動開啟密碼授權(quán)類型
    (2)userDetailsService:如果注入UserDetailsService,那么將會啟動刷新token授權(quán)類型,會判斷用戶是否還是存活的
    (3)authorizationCodeServices:AuthorizationCodeServices的實例,auth code 授權(quán)類型的服務(wù)
    (4)implicitGrantService:imlpicit grant
    (5)tokenGranter:
     
    endpoint的URL的配置:
    (1)AuthorizationServerEndpointsConfigurer的pathMapping()方法,有兩個參數(shù),**個是默認的URL路徑,*二個是自定義的路徑
    (2)WebSecurityConfigurer的實例,可以配置哪些路徑不需要保護,哪些需要保護。默認全都保護。
     
    自定義UI:
    (1)有時候,我們可能需要自定義的登錄頁面和認證頁面。登陸頁面的話,只需要創(chuàng)建一個login為前綴名的網(wǎng)頁即可,在代碼里,設(shè)置為允許訪問,這樣,系統(tǒng)會自動執(zhí)行你的登陸頁。此登陸頁的action要注意一下,必須是跳轉(zhuǎn)到認證的地址。
    (2)另外一個是授權(quán)頁,讓你勾選選項的頁面。此頁面可以參考源碼里的實現(xiàn),自己生成一個controller的類,再創(chuàng)建一個對應(yīng)的web頁面即可實現(xiàn)自定義的功能。
     
    下面梳理一下授權(quán)獲取token流程:
    (1)端口號換成你自己的認證服務(wù)器的端口號,client_id也換成你自己的,response_type類型為code。
     localhost:8080/uaa/oauth/authorize?client_id=client&response_type=code&redirect_uri=
    (2)這時候你將獲得一個code值:
    (3)使用此code值來獲取較終的token:
    curl -X POST -H "Cant-Type: application/x-www-form-urlencoded" -d 'grant_type=authorization_code&code=G0C20Z&redirect_uri=m' "http://client:secret@localhost:8080/uaa/oauth/token"
    返回值:
    {"access_token":"b251b453-cc08-4520-9dd0-9aedf58e6ca3","token_type":"bearer","expires_in":2591324,"scope":"app"}
     
    (4)用此token值來調(diào)用資源服務(wù)器內(nèi)容(如果資源服務(wù)器和認證服務(wù)器在同一個應(yīng)用中,那么資源服務(wù)器會自己解析token值,如果不在,那么你要自己去做處理)
    curl -H "Authorization: Bearer b251b453-cc08-4520-9dd0-9aedf58e6ca3" "localhost:8081/service2(此處換上你自己的url)"
     
    四、Resource Server:保護資源,需要令牌才能訪問
    在配置類上加上注解@EnableResourceServer即啟動。使用ResourceServerConfigurer進行配置:
    (1)tokenServices:ResourceServerTokenServices的實例,聲明了token的服務(wù)
    (2)resourceId:資源Id,由auth Server驗證。
    (3)其它一些擴展點,比如可以從請求中提取token的tokenExtractor
    (4)一些自定義的資源保護配置,通過HttpSecurity來設(shè)置
     
    使用token的方式也有兩種:
    (1)Bearer Token(https傳輸方式保證傳輸過程的安全):主流
    (2)Mac(http+sign)
     
    如何訪問資源服務(wù)器中的API?
    如果資源服務(wù)器和授權(quán)服務(wù)器在同一個應(yīng)用程序中,并且您使用DefaultTokenServices,那么您不必太考慮這一點,因為它實現(xiàn)所有必要的接口,因此它是自動一致的。如果您的資源服務(wù)器是一個單獨的應(yīng)用程序,那么您必須確保您匹配授權(quán)服務(wù)器的功能,并提供知道如何正確解碼令牌的ResourceServerTokenServices。與授權(quán)服務(wù)器一樣,您可以經(jīng)常使用DefaultTokenServices,并且選項大多通過TokenStore(后端存儲或本地編碼)表示。
    (1)在校驗request中的token時,使用RemoteTokenServices去調(diào)用AuthServer中的/auth/check_token。
    (2)共享數(shù)據(jù)庫,使用Jdbc存儲和校驗token,避免再去訪問AuthServer。
    (3)使用JWT簽名的方式,資源服務(wù)器自己直接進行校驗,不借助任何中間媒介。
     
    五、oauth client
    在客戶端獲取到token之后,想去調(diào)用下游服務(wù)API時,為了能將token進行傳遞,可以使用RestTemplate.然后使用restTemplate進行調(diào)用Api。
    注:
    scopes和authorities的區(qū)別:
    scopes是client權(quán)限,至少授予一個scope的權(quán)限,否則報錯。
    authorities是用戶權(quán)限。  
    以上是我從網(wǎng)上找到的一篇寫的不錯的博客,希望可以幫助大家快速了解OAuth2.0,下一篇文章我們正式介紹OAuth2.0在當前框架中的使用。
    從現(xiàn)在開始,我這邊會將近期研發(fā)的spring cloud微服務(wù)云架構(gòu)的搭建過程和精髓記錄下來,幫助更多有興趣研發(fā)spring cloud框架的朋友,大家來一起探討spring cloud架構(gòu)的搭建過程及如何運用于企業(yè)項目。完整項目的源碼來源


    無錫紅豬網(wǎng)絡(luò)科技有限公司專注于java,b2b2c,多用戶商城等

  • 詞條

    詞條說明

  • java springboot b2b2c shop 多用戶商城系統(tǒng)源碼-SpringCloud架構(gòu)設(shè)計

    較近一直在針對SpringCloud框架做項目,從中踩了不少的坑,也漸漸梳理出了一些內(nèi)容,由于SpringCloud作為一個全家桶,其中東西太多,所以這時候就要有所取舍,這里就想把自己比較常用組件及架構(gòu)推薦上來。需要JAVA Spring Cloud大型企業(yè)分布式微服務(wù)云構(gòu)建的B2B2C電子商務(wù)平臺源碼針對這個架構(gòu)圖我分層介紹一下:1、是web服務(wù)器的選型,這個我選擇的是nginx+keepali

  • java 商城系統(tǒng)架構(gòu)之*三篇——集群架構(gòu)搭建

    其實集群說起來是很簡單的,無非就是server部署在多臺機器上,DB、session、文件等在做個機器、CDN加速就OK了。但是實際上需要做的事還有非常多,并且在過程中需要填非常多的坑。這里說一個很多人都不太了解的,就是虛擬IP,比如你訪問,多少年還是那個IP,并且?guī)缀鯖]有掛過。這個IP就是虛擬IP,用戶不會實際訪問這臺服務(wù)器,這臺服務(wù)器是運營商提供的,用戶訪問后會通過各種技術(shù)手

  • (十二)Java springcloud B2B2C o2o多用戶商城 springcloud架構(gòu)-- SSO單點登錄之OAuth2.0 登出流程(3)

    之前寫了很多關(guān)于spring cloud的文章,今天我們對OAuth2.0的整合方式做一下筆記,首先我從網(wǎng)上找了一些關(guān)于OAuth2.0的一些基礎(chǔ)知識點,幫助大家回顧一下知識點:?一、oauth中的角色client:調(diào)用資源服務(wù)器API的應(yīng)用Oauth 2.0 Provider:包括Authorization Server和Resource Server(1)Authorization

  • 開源多用戶商城-B2B2C商城系統(tǒng)

    RedPigMall結(jié)合豐富的電子商城開發(fā)經(jīng)驗推出【B2B2C商城系統(tǒng)】平臺,支持平臺自營、*、連鎖多商家店鋪共存模式,也支持類似云集的平臺供貨,商戶代銷模式S2B2C功能一鍵轉(zhuǎn)換。 全面支持 PC網(wǎng)站/手機網(wǎng)站/微信公眾號/微信小程序/支付寶小程序/ios/Android/等移動平臺。內(nèi)部集成IM客服系統(tǒng)。集成*、積分商城、拼團、**(開發(fā)中)、滿減、組合、優(yōu)惠券、分銷(可自由設(shè)定1-5級)

聯(lián)系方式 聯(lián)系我時,請告知來自八方資源網(wǎng)!

公司名: 無錫紅豬網(wǎng)絡(luò)科技有限公司

聯(lián)系人: 周慶達

電 話:

手 機: 17503009512

微 信: 17503009512

地 址: 江蘇無錫濱湖區(qū)222號

郵 編: 123123

網(wǎng) 址: redpigmall.b2b168.com

八方資源網(wǎng)提醒您:
1、本信息由八方資源網(wǎng)用戶發(fā)布,八方資源網(wǎng)不介入任何交易過程,請自行甄別其真實性及合法性;
2、跟進信息之前,請仔細核驗對方資質(zhì),所有預(yù)付定金或付款至個人賬戶的行為,均存在詐騙風險,請?zhí)岣呔瑁?
    聯(lián)系方式

公司名: 無錫紅豬網(wǎng)絡(luò)科技有限公司

聯(lián)系人: 周慶達

手 機: 17503009512

電 話:

地 址: 江蘇無錫濱湖區(qū)222號

郵 編: 123123

網(wǎng) 址: redpigmall.b2b168.com

    相關(guān)企業(yè)
    商家產(chǎn)品系列
  • 產(chǎn)品推薦
  • 資訊推薦
關(guān)于八方 | 八方幣 | 招商合作 | 網(wǎng)站地圖 | 免費注冊 | 一元廣告 | 友情鏈接 | 聯(lián)系我們 | 八方業(yè)務(wù)| 匯款方式 | 商務(wù)洽談室 | 投訴舉報
粵ICP備10089450號-8 - 經(jīng)營許可證編號:粵B2-20130562 軟件企業(yè)認定:深R-2013-2017 軟件產(chǎn)品登記:深DGY-2013-3594
著作權(quán)登記:2013SR134025
Copyright ? 2004 - 2024 b2b168.com All Rights Reserved