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

全面了解OAuth?2.0四種授權(quán)方式金三銀四無懼面試

 更新時間:2023年02月03日 17:03:41   作者:架構(gòu)精進(jìn)之路  
這篇文章主要介紹了全面了解OAuth?2.0四種授權(quán)方式金三銀四無懼面試,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

首先

我們需要清楚 OAuth 是什么?

OAuth 引入了一個授權(quán)層,用來分離兩種不同的角色:客戶端和資源所有者。......資源所有者同意以后,資源服務(wù)器可以向客戶端頒發(fā)令牌??蛻舳送ㄟ^令牌,去請求數(shù)據(jù)。

上面這段話的意思就是:OAuth 的核心就是向第三方應(yīng)用頒發(fā)令牌。

由于互聯(lián)網(wǎng)有多種場景,OAuth 2.0 規(guī)定了四種獲得令牌的流程,你可以選擇最適合自己的那一種,向第三方應(yīng)用頒發(fā)令牌。

下面就是這四種授權(quán)方式。

  • 授權(quán)碼(authorization-code)
  • 隱藏式(implicit)
  • 密碼式(password)
  • 客戶端憑證(client credentials)

注意,不管哪一種授權(quán)方式,第三方應(yīng)用申請令牌之前,都必須先到系統(tǒng)備案,說明自己的身份,然后會拿到兩個身份識別碼:客戶端 ID(client ID)和客戶端密鑰(client secret)。

這是為了防止令牌被濫用,沒有備案過的第三方應(yīng)用,是不會拿到令牌的。

第一種授權(quán)方式:授權(quán)碼

授權(quán)碼(authorization code)方式,指的是第三方應(yīng)用先申請一個授權(quán)碼,然后再用該碼獲取令牌。

這種方式是最常用的流程,安全性也最高,它適用于那些有后端的 Web 應(yīng)用。授權(quán)碼通過前端傳送,令牌則是儲存在后端,而且所有與資源服務(wù)器的通信都在后端完成。這樣的前后端分離,可以避免令牌泄漏。

第一步,A 網(wǎng)站提供一個鏈接,用戶點(diǎn)擊后就會跳轉(zhuǎn)到 B 網(wǎng)站,授權(quán)用戶數(shù)據(jù)給 A 網(wǎng)站使用。下面就是 A 網(wǎng)站跳轉(zhuǎn) B 網(wǎng)站的一個示意鏈接。

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

上面 URL 中,response_type參數(shù)表示要求返回授權(quán)碼(code),client_id參數(shù)讓 B 知道是誰在請求,redirect_uri參數(shù)是 B 接受或拒絕請求后的跳轉(zhuǎn)網(wǎng)址,scope參數(shù)表示要求的授權(quán)范圍(這里是只讀)。

第二步,用戶跳轉(zhuǎn)后,B 網(wǎng)站會要求用戶登錄,然后詢問是否同意給予 A 網(wǎng)站授權(quán)。用戶表示同意,這時 B 網(wǎng)站就會跳回redirect_uri參數(shù)指定的網(wǎng)址。跳轉(zhuǎn)時,會傳回一個授權(quán)碼,就像下面這樣。

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

上面 URL 中,code參數(shù)就是授權(quán)碼。

第三步,A 網(wǎng)站拿到授權(quán)碼以后,就可以在后端,向 B 網(wǎng)站請求令牌。

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

上面 URL 中,client_id參數(shù)和client_secret參數(shù)用來讓 B 確認(rèn) A 的身份(client_secret參數(shù)是保密的,因此只能在后端發(fā)請求),grant_type參數(shù)的值是AUTHORIZATION_CODE,表示采用的授權(quán)方式是授權(quán)碼,code參數(shù)是上一步拿到的授權(quán)碼,redirect_uri參數(shù)是令牌頒發(fā)后的回調(diào)網(wǎng)址。

第四步,B 網(wǎng)站收到請求以后,就會頒發(fā)令牌。具體做法是向redirect_uri指定的網(wǎng)址,發(fā)送一段 JSON 數(shù)據(jù)。

{
"access_token":"ACCESS_TOKEN",
"token_type":"bearer",
"expires_in":2592000,
"refresh_token":"REFRESH_TOKEN",
"scope":"read",
"uid":100101,
"info":{...}
}

上面 JSON 數(shù)據(jù)中,access_token字段就是令牌,A 網(wǎng)站在后端拿到了。

第二種方式:隱藏式

有些 Web 應(yīng)用是純前端應(yīng)用,沒有后端。這時就不能用上面的方式了,必須將令牌儲存在前端。RFC 6749 就規(guī)定了第二種方式,允許直接向前端頒發(fā)令牌。這種方式?jīng)]有授權(quán)碼這個中間步驟,所以稱為(授權(quán)碼)"隱藏式"(implicit)。

第一步,A 網(wǎng)站提供一個鏈接,要求用戶跳轉(zhuǎn)到 B 網(wǎng)站,授權(quán)用戶數(shù)據(jù)給 A 網(wǎng)站使用。

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

上面 URL 中,response_type參數(shù)為token,表示要求直接返回令牌。

第二步,用戶跳轉(zhuǎn)到 B 網(wǎng)站,登錄后同意給予 A 網(wǎng)站授權(quán)。這時,B 網(wǎng)站就會跳回redirect_uri參數(shù)指定的跳轉(zhuǎn)網(wǎng)址,并且把令牌作為 URL 參數(shù),傳給 A 網(wǎng)站。

https://a.com/callback#token=ACCESS_TOKEN

上面 URL 中,token參數(shù)就是令牌,A 網(wǎng)站因此直接在前端拿到令牌。

注意,令牌的位置是 URL 錨點(diǎn)(fragment),而不是查詢字符串(querystring),這是因為 OAuth 2.0 允許跳轉(zhuǎn)網(wǎng)址是 HTTP 協(xié)議,因此存在"中間人攻擊"的風(fēng)險,而瀏覽器跳轉(zhuǎn)時,錨點(diǎn)不會發(fā)到服務(wù)器,就減少了泄漏令牌的風(fēng)險。

這種方式把令牌直接傳給前端,是很不安全的。因此,只能用于一些安全要求不高的場景,并且令牌的有效期必須非常短,通常就是會話期間(session)有效,瀏覽器關(guān)掉,令牌就失效了。

第三種方式:密碼式

如果你高度信任某個應(yīng)用,RFC 6749 也允許用戶把用戶名和密碼,直接告訴該應(yīng)用。該應(yīng)用就使用你的密碼,申請令牌,這種方式稱為"密碼式"(password)。

第一步,A 網(wǎng)站要求用戶提供 B 網(wǎng)站的用戶名和密碼。拿到以后,A 就直接向 B 請求令牌。

https://oauth.b.com/token?
	grant_type=password&
	username=USERNAME&
	password=PASSWORD&
	client_id=CLIENT_ID

上面 URL 中,grant_type參數(shù)是授權(quán)方式,這里的password表示"密碼式",username和password是 B 的用戶名和密碼。

第二步,B 網(wǎng)站驗證身份通過后,直接給出令牌。注意,這時不需要跳轉(zhuǎn),而是把令牌放在 JSON 數(shù)據(jù)里面,作為 HTTP 回應(yīng),A 因此拿到令牌。

這種方式需要用戶給出自己的用戶名/密碼,顯然風(fēng)險很大,因此只適用于其他授權(quán)方式都無法采用的情況,而且必須是用戶高度信任的應(yīng)用。

第四種方式:憑證式

最后一種方式是憑證式(client credentials),適用于沒有前端的命令行應(yīng)用,即在命令行下請求令牌。

第一步,A 應(yīng)用在命令行向 B 發(fā)出請求。

https://oauth.b.com/token?
	grant_type=client_credentials&
	client_id=CLIENT_ID&
	client_secret=CLIENT_SECRET

上面 URL 中,grant_type參數(shù)等于client_credentials表示采用憑證式,client_id和client_secret用來讓 B 確認(rèn) A 的身份。

第二步,B 網(wǎng)站驗證通過以后,直接返回令牌。

這種方式給出的令牌,是針對第三方應(yīng)用的,而不是針對用戶的,即有可能多個用戶共享同一個令牌。

令牌的使用

A 網(wǎng)站拿到令牌以后,就可以向 B 網(wǎng)站的 API 請求數(shù)據(jù)了。

此時,每個發(fā)到 API 的請求,都必須帶有令牌。具體做法是在請求的頭信息,加上一個Authorization字段,令牌就放在這個字段里面。

curl -H "Authorization: Bearer ACCESS_TOKEN" \
	"https://api.b.com"

上面命令中,ACCESS_TOKEN就是拿到的令牌。

更新令牌

令牌的有效期到了,如果讓用戶重新走一遍上面的流程,再申請一個新的令牌,很可能體驗不好,而且也沒有必要。OAuth 2.0 允許用戶自動更新令牌。

具體方法是,B 網(wǎng)站頒發(fā)令牌的時候,一次性頒發(fā)兩個令牌,一個用于獲取數(shù)據(jù),另一個用于獲取新的令牌(refresh token 字段)。令牌到期前,用戶使用 refresh token 發(fā)一個請求,去更新令牌。

https://b.com/oauth/token?
	grant_type=refresh_token&
	client_id=CLIENT_ID&
	client_secret=CLIENT_SECRET&
	refresh_token=REFRESH_TOKEN

上面 URL 中,grant_type參數(shù)為refresh_token表示要求更新令牌,client_id參數(shù)和client_secret參數(shù)用于確認(rèn)身份,refresh_token參數(shù)就是用于更新令牌的令牌。

B 網(wǎng)站驗證通過以后,就會頒發(fā)新的令牌。

參考:OAuth 2.0 

以上就是全面了解OAuth 2.0四種授權(quán)方式金三銀四無懼面試的詳細(xì)內(nèi)容,更多關(guān)于OAuth 2.0面試四種授權(quán)方式的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • java類的加載過程以及類加載器的分析

    java類的加載過程以及類加載器的分析

    這篇文章給大家詳細(xì)講述了java類的加載過程以及類加載器的相關(guān)知識點(diǎn)內(nèi)容,有需要的朋友可以學(xué)習(xí)下。
    2018-08-08
  • Java泛型通配符的使用詳解

    Java泛型通配符的使用詳解

    本文主要介紹了Java泛型通配符的使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • 解決Java中SimpleDateFormat線程不安全的五種方案

    解決Java中SimpleDateFormat線程不安全的五種方案

    SimpleDateFormat 就是一個典型的線程不安全事例,本文主要介紹了解決Java中SimpleDateFormat線程不安全的五種方案,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • 淺談foreach寫失效的問題

    淺談foreach寫失效的問題

    下面小編就為大家?guī)硪黄獪\談foreach寫失效的問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • Java創(chuàng)建多線程服務(wù)器流程

    Java創(chuàng)建多線程服務(wù)器流程

    這篇文章主要介紹了Java創(chuàng)建多線程服務(wù)器流程,以下實例演示了如何使用Socket類的accept()方法和ServerSocket類的MultiThreadServer(socketname)方法來實現(xiàn)多線程服務(wù)器程序
    2023-05-05
  • 淺談JVM系列之從匯編角度分析NullCheck

    淺談JVM系列之從匯編角度分析NullCheck

    在virtual call中執(zhí)行nullcheck的時候,如果已經(jīng)知道傳遞的參數(shù)是非空的。JIT會對代碼進(jìn)行優(yōu)化嗎?本文將詳細(xì)介紹JVM系列之從匯編角度分析NullCheck。
    2021-06-06
  • Java中的共享鎖CountDownLatch及源碼解析

    Java中的共享鎖CountDownLatch及源碼解析

    這篇文章主要介紹了Java中的共享鎖CountDownLatch及源碼解析,CountDownLatch是一種同步輔助工具,允許一個或多個線程等待,直到在其它線程中執(zhí)行的一組操作完成;CountDownLatch使用指定的計數(shù)初始化,需要的朋友可以參考下
    2023-11-11
  • 如何關(guān)閉 IDEA 自動更新

    如何關(guān)閉 IDEA 自動更新

    這篇文章主要介紹了如何關(guān)閉 IDEA 自動更新,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • Maven打包SpringBoot工程的實現(xiàn)示例

    Maven打包SpringBoot工程的實現(xiàn)示例

    在使用Spring Boot和Maven的項目中,你可以使用Maven來打包你的項目,本文主要介紹了Maven打包SpringBoot工程的實現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下
    2024-05-05
  • maven多模塊項目單獨(dú)打包指定模塊jar包方式

    maven多模塊項目單獨(dú)打包指定模塊jar包方式

    這篇文章主要介紹了maven多模塊項目單獨(dú)打包指定模塊jar包方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-09-09

最新評論

石渠县| 九台市| 滨州市| 永安市| 桦南县| 台湾省| 确山县| 阳谷县| 灵山县| 阿坝县| 阿拉尔市| 晋江市| 台北市| 邢台县| 青岛市| 建水县| 高尔夫| 诸暨市| 阜南县| 平南县| 内乡县| 丰都县| 陇川县| 汤阴县| 囊谦县| 揭东县| 邛崃市| 霍城县| 甘洛县| 阜宁县| 元谋县| 闵行区| 沾益县| 蒲江县| 福贡县| 嘉定区| 休宁县| 临湘市| 新竹县| 鱼台县| 白银市|