OAUTH 2.0授权码授予
OAuth 2.0提供了許多安全性流程(或授權(quán)類型),以允許一個應(yīng)用程序訪問另一個應(yīng)用程序中的用戶數(shù)據(jù)。
在此博客中,我們將介紹OAuth 2.0授權(quán):授權(quán)代碼授權(quán)。
首先,有許多定義:
- 客戶端 :用戶當(dāng)前正在與之交互的應(yīng)用程序。 例如,我們假設(shè)一個虛構(gòu)的時髦博客網(wǎng)站:www.myfunkyblog.com。 客戶端希望與另一個應(yīng)用程序通信并從那里檢索有關(guān)用戶的信息。 例如,他們最喜歡的照片! 讓我們假設(shè)虛擬的megaphotosharing.com作為服務(wù) ? 客戶希望訪問。
- 客戶ID :這是標(biāo)識客戶的ID。 可以在Web URL等中公開傳遞
- 客戶機(jī)密ID : 只有客戶知道的機(jī)密ID。 這保留在服務(wù)器端,將用于對要訪問的應(yīng)用程序的請求中。 它不能在Web URL中傳遞。
- 資源擁有者 :這通常是人 ,誰在使用客戶端應(yīng)用程序。 資源所有者在客戶端( myfunkyblog.com )希望訪問的另一個應(yīng)用程序(例如megaphotosharing.com)中具有數(shù)據(jù)。 目的是在無需資源所有者(也就是人類)將其megaphotosharing.com密碼傳遞到myfunkyblog.com的情況下,促進(jìn)共享。 注意:資源所有者不必是人類,但根據(jù)OAuth規(guī)范 ,有趣的是,資源所有者是人類時,也可以稱為最終用戶。
- 資源服務(wù)器 :托管客戶端感興趣的資源所有者的受保護(hù)資源。因此,這是megaphotosharing.com服務(wù)器,其中具有myfunkyblog.com感興趣的資源所有者的照片。
- 授權(quán)服務(wù)器 :在資源所有者成功通過身份驗(yàn)證并允許myfunkyblog.com獲得其megaphotosharing.com的 一部分之后,向myfunkyblog.com發(fā)行令牌的服務(wù)器。 有時,授權(quán)服務(wù)器和資源服務(wù)器實(shí)際上是相同的,但不必相同。
- 訪問令牌 : myfunkyblog.com授權(quán)服務(wù)器提供的一種特殊類型的令牌,使megaphotosharing.com可以訪問受保護(hù)的資源。 它將包含范圍,生存期和其他訪問屬性。
用例
因此,用例是客戶端( myfunkyblog.com )希望從另一個應(yīng)用程序megaphotosharing.com訪問有關(guān)資源所有者(人)的信息。
客戶注冊
客戶首先要做的是向服務(wù)( megaphotosharing.com )注冊,并提供其名稱,網(wǎng)站等。該服務(wù)將返回一個秘密的客戶代碼。
客戶將其保密,并負(fù)責(zé)確保只有其知道。 通常,它將加密并將其持久化在后端的客戶端中。 該服務(wù)還將收到一個客戶端ID。 與客戶機(jī)密不同,這是公開的,可以在URL等中傳遞。
流
好吧,現(xiàn)在是實(shí)際流量。
用戶正在myfunkyblog.com上瀏覽,并訪問myfunkyblog.com想要了解最終用戶最喜歡的照片的網(wǎng)站的一部分。
最終用戶將看到一個彈出屏幕。
該網(wǎng)址:
https://megaphotosharing.com/oauth/authorize?response_type=code&client_id=CLIENT_ID&redirect_uri=CALLBACK_URL?ope=read該網(wǎng)址的關(guān)鍵部分:
- megaphotosharing.com:這是授權(quán)服務(wù)器的域
- response_type = code:啟用客戶端所需的參數(shù)將通知授權(quán)服務(wù)器所需的授予類型。 一個替代值是“令牌”,用于隱式流。 “代碼”表示客戶端需要授權(quán)碼 ,該授權(quán)碼將在資源所有者登錄后返回。該授權(quán)碼將在客戶端的后續(xù)請求中使用。
- client_id:必需參數(shù),用于標(biāo)識客戶端。 請記住,這是公開的
可以在Web瀏覽器之間傳遞。 - redirect_uri:這是一個可選參數(shù)。 它使客戶端可以動態(tài)指定身份驗(yàn)證服務(wù)器應(yīng)重定向到的URL。 在某些流程中,這是不需要的,因?yàn)橹挥幸粋€重定向URI,并且它在客戶端注冊期間由客戶端向服務(wù)注冊。
- 作用域:這是一個可選參數(shù)。 它指定應(yīng)用程序正在請求的訪問級別。 在這種情況下,這只是讀取。 身份驗(yàn)證服務(wù)器使用它來通知用戶/資源所有者客戶端正在嘗試執(zhí)行的操作。
然后,用戶登錄megaphotosharing.com,告訴用戶客戶端要做什么。 如果用戶選擇“確定”,則megaphotosharing.com將重定向到傳遞的重定向URI。
https://myfunkyblog.com/callback?code=212132kjhkhj注意客戶端ID是如何通過URL 在Web上傳遞的 并將授權(quán)代碼通過網(wǎng)絡(luò)傳回。
然后,客戶端使用返回的授權(quán)代碼,其客戶端ID,客戶端密碼和授予類型來向服務(wù)器發(fā)送POST請求,以獲取訪問令牌。 這一切都發(fā)生在后端。
https://megaphotosharing.com/v1/oauth/token?client_id=CLIENT_ID&client_secret=CLIENT_SECRET&grant_type=authorization_code&code=?212132kjhkhj&redirect_uri=CALLBACK_URL筆記:
- 客戶ID和客戶機(jī)密標(biāo)識客戶。 這是一個后端請求,因此可以傳遞client_secret(顯然不會傳遞給瀏覽器或從瀏覽器傳遞)。
- grant_type:必須將其設(shè)置為authorisation_code。 因?yàn)樗硎臼跈?quán)碼授予。 請記住,授予用于指示客戶端正在使用的流(服務(wù)器也可以使用哪些類型的可用流)。 如果客戶端正在使用“客戶端證書授予”,則該值為:“ client_credentials”。 如果客戶端使用“資源所有者密碼憑據(jù)授予”,則該值為“密碼”。
- 代碼: 212132kjhkhj –實(shí)際授權(quán)碼,是從授權(quán)服務(wù)器發(fā)出的初始授權(quán)請求中返回的內(nèi)容。 這是必需的。
- redirect_uri:如果redirect_uri包含在授權(quán)請求中,則該值必須與該請求中使用的值相同。
客戶端然后接收回訪問令牌。 像這樣:
{"access_token":"ACCESS_TOKEN","token_type":"bearer","expires_in":2592000,"refresh_token":"REFRESH_TOKEN","scope":"read","uid":1001013121222}現(xiàn)在它將使用它來訪問某些資源所有者的資源數(shù)據(jù)。
那有什么大不了的?
- 對于用戶不必告訴一個網(wǎng)站另一個網(wǎng)站的密碼來說,顯然有很大的優(yōu)勢。
- 減少用戶需要記住的密碼數(shù)量
- 通過允許不同的應(yīng)用程序相互通信,可以提供更豐富的網(wǎng)站。
人們?yōu)槭裁磿械嚼Щ?#xff1f;
人們發(fā)現(xiàn)OAuth 2.0令人困惑的原因有很多。
- 有一些不同的流程或贈款。 授權(quán)碼授予只是其中之一。 有時,當(dāng)您在Google上搜索OAuth 2.0的說明時,會得到針對不同補(bǔ)助金的說明,而沒有弄清楚到底是什么還是沒有解釋。 因此,為什么要在標(biāo)題中添加授權(quán)碼授予。
- 術(shù)語。 我只為自己說話。 但是,如果我快速閱讀,我可能會:
- 將“客戶”與最終用戶混淆
- 一致。 許多地方都實(shí)現(xiàn)了OAuth 2.0或與OAuth非常相似的東西,但是在此過程中它們的引用方式有所不同。 例如,轉(zhuǎn)到quora.com,然后嘗試登錄google。 您將被帶到: https://accounts.google.com/signin/oauth/oauthchooseaccount?client_id=917071888555.apps.googleusercontent.com&as=rdWeinbqWJbt6ChoW2f3Fg&destination=https%3A%2F%2Fwww.quora.com≈proval_state=!ChRyQlhnbEYzai1xQTliNlNmTEVmNRIfZ3doM2hlRVIycGdiMEVBN1JaNXdOM085MERXLVVCWQ%E2%88%99ANKMe1QAAAAAW2i2to0SOyO2_w3k3O4gjwUKQLGNmZ2h&oauthgdpr=1&xsrfsig=AHgIfE8EzSxvWfzyxou0dwLDxv4GhD6e5g&flowName=GeneralOAuthFlow
該URL中沒有response_type。
- OAuth是授權(quán)規(guī)范。 它通常與身份驗(yàn)證規(guī)范一起使用,例如Open Connect,但這實(shí)際上是一個單獨(dú)的規(guī)范。
翻譯自: https://www.javacodegeeks.com/2018/08/oauth-authorisation-code-grant.html
總結(jié)
以上是生活随笔為你收集整理的OAUTH 2.0授权码授予的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ddos吧(ddos最新分析)
- 下一篇: struts2面试问题_Struts2面