(十)Java springcloud B2B2C o2o多用戶商城 springcloud架構(gòu)-SSO單點(diǎn)登錄之OAuth2.0登錄認(rèn)證(1)

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

    Oauth 2.0 Provider:包括Authorization ServerResource Server

    1Authorization Server:認(rèn)證服務(wù)器,進(jìn)行認(rèn)證和授權(quán)

    2Resource Server:資源服務(wù)器,保護(hù)受保護(hù)的資源
    user:資源的擁有者

    二、下面詳細(xì)介紹一下Oauth 2.0 Provider
    Authorization Server:
    1AuthorizationEndpoint:進(jìn)行授權(quán)的服務(wù),Default URL: /oauth/authorize

    2TokenEndpoint:獲取token的服務(wù),Default URL: /oauth/token  

    Resource Server:
    OAuth2AuthenticationProcessingFilter:給帶有訪問令牌的請(qǐng)求加載認(rèn)證

    三、下面再來詳細(xì)介紹一下Authorization Server:
    一般情況下,創(chuàng)建兩個(gè)配置類,一個(gè)繼承AuthorizationServerConfigurerAdapter,一個(gè)繼承WebSecurityConfigurerAdapter,再去復(fù)寫里面的方法。

    主要出現(xiàn)的兩種注解:
    1、@EnableAuthorizationServer:聲明一個(gè)認(rèn)證服務(wù)器,當(dāng)用此注解后,應(yīng)用啟動(dòng)后將自動(dòng)生成幾個(gè)Endpoint:(注:其實(shí)實(shí)現(xiàn)一個(gè)認(rèn)證服務(wù)器就是這么簡(jiǎn)單,加一個(gè)注解就搞定,當(dāng)然真正用到生產(chǎn)環(huán)境還是要進(jìn)行一些配置和復(fù)寫工作的。)

    /oauth/authorize:驗(yàn)證

    /oauth/token:獲取token

    /oauth/confirm_access:用戶授權(quán)

    /oauth/error:認(rèn)證失敗

    /oauth/check_token:資源服務(wù)器用來校驗(yàn)token

    /oauth/token_key:如果jwt模式則可以用此來從認(rèn)證服務(wù)器獲取公鑰

    以上這些endpoint都在源碼里的endpoint包里面。

    2@Beans:需要實(shí)現(xiàn)AuthorizationServerConfigurer

    AuthorizationServerConfigurer包含三種配置:

    ClientDetailsServiceConfigurerclient客戶端的信息配置,client信息包括:clientIdsecret、scope、authorizedGrantTypes、authorities

    1scope:表示權(quán)限范圍,可選項(xiàng),用戶授權(quán)頁面時(shí)進(jìn)行選擇

    2authorizedGrantTypes:有四種授權(quán)方式 

    Authorization Code:用驗(yàn)證獲取code,再用code去獲取token(用的較多的方式,也是較安全的方式)
    Implicit: 隱式授權(quán)模式
    Client Credentials (用來** App Access Token)
    Resource Owner Password Credentials
    3authorities:授予client的權(quán)限

    這里的具體實(shí)現(xiàn)有多種,in-memory、JdbcClientDetailsServicejwt等。

    AuthorizationServerSecurityConfigurer:聲明安全約束,哪些允許訪問,哪些不允許訪問

    AuthorizationServerEndpointsConfigurer:聲明授權(quán)和token的端點(diǎn)以及token的服務(wù)的一些配置信息,比如采用什么存儲(chǔ)方式、token的有效期等

     

    client的信息的讀?。涸?/span>ClientDetailsServiceConfigurer類里面進(jìn)行配置,可以有in-memoryjdbc等多種讀取方式。

    jdbc需要調(diào)用JdbcClientDetailsService類,此類需要傳入相應(yīng)的DataSource.

     

    下面再介紹一下如何管理token:
    AuthorizationServerTokenServices接口:聲明必要的關(guān)于token的操作

    1)當(dāng)token創(chuàng)建后,保存起來,以便之后的接受訪問令牌的資源可以引用它。

    2)訪問令牌用來加載認(rèn)證

    接口的實(shí)現(xiàn)也有多種,DefaultTokenServices是其默認(rèn)實(shí)現(xiàn),他使用了默認(rèn)的InMemoryTokenStore,不會(huì)持久化token

     

    token存儲(chǔ)方式共有三種分別是:
    1InMemoryTokenStore:存放內(nèi)存中,不會(huì)持久化

    2JdbcTokenStore:存放數(shù)據(jù)庫中

    3Jwt: json web token

     

    授權(quán)類型:
    可以通過AuthorizationServerEndpointsConfigurer來進(jìn)行配置,默認(rèn)情況下,支持除了密碼外的所有授權(quán)類型。相關(guān)授權(quán)類型的一些類:

    1authenticationManager:直接注入一個(gè)AuthenticationManager,自動(dòng)開啟密碼授權(quán)類型

    2userDetailsService:如果注入UserDetailsService,那么將會(huì)啟動(dòng)刷新token授權(quán)類型,會(huì)判斷用戶是否還是存活的

    3authorizationCodeServicesAuthorizationCodeServices的實(shí)例,auth code 授權(quán)類型的服務(wù)

    4implicitGrantServiceimlpicit grant

    5tokenGranter

     

    endpointURL的配置:
    1AuthorizationServerEndpointsConfigurerpathMapping()方法,有兩個(gè)參數(shù),**個(gè)是默認(rèn)的URL路徑,*二個(gè)是自定義的路徑

    2WebSecurityConfigurer的實(shí)例,可以配置哪些路徑不需要保護(hù),哪些需要保護(hù)。默認(rèn)全都保護(hù)。

     

    自定義UI:
    1)有時(shí)候,我們可能需要自定義的登錄頁面和認(rèn)證頁面。登陸頁面的話,只需要?jiǎng)?chuàng)建一個(gè)login為前綴名的網(wǎng)頁即可,在代碼里,設(shè)置為允許訪問,這樣,系統(tǒng)會(huì)自動(dòng)執(zhí)行你的登陸頁。此登陸頁的action要注意一下,必須是跳轉(zhuǎn)到認(rèn)證的地址。

    2)另外一個(gè)是授權(quán)頁,讓你勾選選項(xiàng)的頁面。此頁面可以參考源碼里的實(shí)現(xiàn),自己生成一個(gè)controller的類,再創(chuàng)建一個(gè)對(duì)應(yīng)的web頁面即可實(shí)現(xiàn)自定義的功能。

     

    下面梳理一下授權(quán)獲取token流程:
    1)端口號(hào)換成你自己的認(rèn)證服務(wù)器的端口號(hào),client_id也換成你自己的,response_type類型為code。

     localhost:8080/uaa/oauth/authorize?client_id=client&response_type=code&redirect_uri=
    2)這時(shí)候你將獲得一個(gè)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ù)器和認(rèn)證服務(wù)器在同一個(gè)應(yīng)用中,那么資源服務(wù)器會(huì)自己解析token值,如果不在,那么你要自己去做處理)

    curl -H "Authorization: Bearer b251b453-cc08-4520-9dd0-9aedf58e6ca3" "localhost:8081/service2(此處換上你自己的url"

     

    四、Resource Server:保護(hù)資源,需要令牌才能訪問
    在配置類上加上注解@EnableResourceServer即啟動(dòng)。使用ResourceServerConfigurer進(jìn)行配置:

    1tokenServicesResourceServerTokenServices的實(shí)例,聲明了token的服務(wù)

    2resourceId:資源Id,由auth Server驗(yàn)證。

    3)其它一些擴(kuò)展點(diǎn),比如可以從請(qǐng)求中提取tokentokenExtractor

    4)一些自定義的資源保護(hù)配置,通過HttpSecurity來設(shè)置

     

    使用token的方式也有兩種:

    1Bearer Tokenhttps傳輸方式保證傳輸過程的安全):主流

    2Machttp+sign

     

    如何訪問資源服務(wù)器中的API

    如果資源服務(wù)器和授權(quán)服務(wù)器在同一個(gè)應(yīng)用程序中,并且您使用DefaultTokenServices,那么您不必太考慮這一點(diǎn),因?yàn)樗鼘?shí)現(xiàn)所有必要的接口,因此它是自動(dòng)一致的。如果您的資源服務(wù)器是一個(gè)單獨(dú)的應(yīng)用程序,那么您必須確保您匹配授權(quán)服務(wù)器的功能,并提供知道如何正確解碼令牌的ResourceServerTokenServices。與授權(quán)服務(wù)器一樣,您可以經(jīng)常使用DefaultTokenServices,并且選項(xiàng)大多通過TokenStore(后端存儲(chǔ)或本地編碼)表示。

    1)在校驗(yàn)request中的token時(shí),使用RemoteTokenServices去調(diào)用AuthServer中的/auth/check_token。

    2)共享數(shù)據(jù)庫,使用Jdbc存儲(chǔ)和校驗(yàn)token,避免再去訪問AuthServer。

    3)使用JWT簽名的方式,資源服務(wù)器自己直接進(jìn)行校驗(yàn),不借助任何中間媒介。

     

    五、oauth client
    在客戶端獲取到token之后,想去調(diào)用下游服務(wù)API時(shí),為了能將token進(jìn)行傳遞,可以使用RestTemplate.然后使用restTemplate進(jìn)行調(diào)用Api。

    注:

    scopesauthorities的區(qū)別:

    scopesclient權(quán)限,至少授予一個(gè)scope的權(quán)限,否則報(bào)錯(cuò)。

    authorities是用戶權(quán)限。   

    以上是我從網(wǎng)上找到的一篇寫的不錯(cuò)的博客,希望可以幫助大家快速了解OAuth2.0,下一篇文章我們正式介紹OAuth2.0在當(dāng)前框架中的使用。 

    從現(xiàn)在開始,我這邊會(huì)將近期研發(fā)的spring cloud微服務(wù)云架構(gòu)的搭建過程和精髓記錄下來,幫助更多有興趣研發(fā)spring cloud框架的朋友,大家來一起探討spring cloud架構(gòu)的搭建過程及如何運(yùn)用于企業(yè)項(xiàng)目。完整項(xiàng)目的源碼來源

     


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

  • 詞條

    詞條說明

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

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

  • java多用戶商城系統(tǒng)架構(gòu)之**篇——總的介紹

    較近公司要開發(fā)商城,讓我多方咨詢,最后看了很多,要不就是代碼、表字段注釋不全,要不就是bug多,要么就是文檔缺少,最后決定自己開發(fā)一套商城。下面是開發(fā)的一些心得體會(huì),權(quán)且記錄下來,給自己做個(gè)記錄把。之**直都是在從事電商相關(guān)和互聯(lián)網(wǎng)金融開發(fā),處理過億級(jí)數(shù)據(jù)量,所以被目前這家公司看重。由于Java是開源的,較近幾年Hadoop等開源產(chǎn)品越來越成熟,而且是基于Java的,所以較終選擇Java最后后臺(tái)開

  • java電商 商城 微商城 b2b2c多商戶電商 二次開發(fā)源碼PC版+wap版

    系統(tǒng)具有統(tǒng)一后臺(tái)管理、部署文檔、操作文檔、開發(fā)文檔、數(shù)據(jù)庫腳本、數(shù)據(jù)字典、開發(fā)快速上手說明等文檔。代碼在Action類中注釋清晰,Service層和Dao層面向接口的開發(fā)技術(shù)簡(jiǎn)單易學(xué),使您能夠快速上手開發(fā)。系統(tǒng)支持的支付方式:系統(tǒng)支持的支付方式:平臺(tái)統(tǒng)一支付(收款到平臺(tái)賬戶,賣家申請(qǐng)?zhí)岈F(xiàn)后財(cái)務(wù)打款給賣家)和店鋪支付(直接收款到賣家自己的賬戶)系統(tǒng)支持的在線支付方式:PC端(見PayTools.ja

  • java多用戶B2B2C商城源碼仿京東源碼

    本系統(tǒng)可以重新開發(fā)源代碼,主要用于二次開發(fā)的開發(fā)人員學(xué)習(xí)和參考使用,不明白仔細(xì)購買的源代碼,因?yàn)闀r(shí)間有限,不會(huì)安裝聯(lián)系人,我肯定有時(shí)間購買安裝服務(wù)?Java多用戶B2B2C商城源代碼模仿京東源代碼支持MySQL購物中心系統(tǒng)是一個(gè)用Java語言開發(fā)的多用戶購物中心系統(tǒng)。SpringBoot、SpringCloud、MyBatis作為基本開發(fā)框架,應(yīng)用保衛(wèi)框架管理系統(tǒng)權(quán)限,結(jié)合URL重寫技術(shù)

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

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

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

電 話:

手 機(jī): 17503009512

微 信: 17503009512

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

郵 編: 123123

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

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

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

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

手 機(jī): 17503009512

電 話:

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

郵 編: 123123

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

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