oauth2 access_denied 不允许访问_OAuth 2 是什么-入门介绍
OAuth 2是什么
OAuth 2是一個可以通過瀏覽器,手機等多種設備進行安全授權的一個標準簡單的開源協議。
隨著互聯網的興起以及普及,越來越多的應用出現在用戶的面前。這些應用大部分都是相對獨立的以及由不同的公司進行運營的。不同的應用也保存了不同的數據。因此跨應用的數據訪問就變得不可避免。當我們需要跨應用訪問數據的時候,我們就需要解決如何讓應用A能夠訪問到應用B中的用戶數據。比如說,在百度云或者OneDrive中保存了相片(應用B),相片打印服務(應用A)就需要訪問百度云或者OneDrive中的數據進行處理。
一種最簡單的方法就是應用A詢問用戶在應用B中的認證信息,然后使用這個認證信息進行數據訪問。但是這樣子就意味著應用A擁有了用戶的認證信息,應用A可以隨意訪問用戶在應用B中的數據(雖然每個應用都聲稱不會濫用,但誰知道呢)。
因此需要一種方案可以能夠授權應用A適當的權限來獲取應用B中的數據。而OAuth 2就是這么一種解決方案。
代客泊車鑰匙的例子
計算機世界,很多時候都是現實世界的映射,OAuth 2也不例外。
在影視作品中,我們常??梢钥吹街鹘莻冮_著車來到一個豪華的酒店或者賭場的大堂,下了車之后直接扔了一副車鑰匙給服務生。服務生會替車主將車停好。如果是一輛小破車,或許車主還不至于太擔心服務生把車私自開走。但是要是是一輛豪車的話,就很難說了。
那么之所以服務生沒有能把車開走,秘訣就在這個車鑰匙上。這個車鑰匙是代客泊車專用鑰匙(英文叫做valet parking key)。這鑰匙只能限制性的操作車中的某些功能,比如只能以時速不超過20km/h行駛,或者不能駕駛超過10分鐘,還有類似無法打開天窗和后備箱。通過這種功能性的限制(權限限制),使得服務生只能操作被允許的功能即代客泊車,而無法完成超過其權限的操作,比如拿走后備箱的東西等等。
在這個例子中,涉及到了五個部分,車主,服務生,代客泊車鑰匙,車主鑰匙,以及車。這五個部分對應到OAuth 2的場景中就是,資源所有者,客戶終端,token,資源所有者在資源服務器上的用戶名和密碼,資源服務器上的資源。如果用我們上面應用A和應用B的場景,那就是服務生=應用A=客戶終端,車=應用2=資源服務器上的資源。
OAuth 2 組件
在上面的例子中也簡略的提到了OAuth 2的各個組件。OAuth 2中一共涉及到4個組件,客戶端,用戶也就是資源所有者,授權服務器,以及資源服務器。
這四個組件的大致關系如下圖所示。授權服務器是一個能夠提供受限的密鑰(key)或者令牌(token)類似于上文提到的valet parking key。
客戶端包括了可信客戶端和非可信客戶端。可信客戶端一般是指客戶端和資源服務器屬于同一個團體開發的,比如微博的資源服務器和微博官方客戶端。非可信客戶端,則一般指由第三方開發的客戶端,比如很多第三方的微博應用。
OAuth 2中的各個組件
從上圖的示例中可以看出,用戶即資源所有者可以通過客戶端訪問資源服務器上的資源??蛻舳藶榱四軌蛟L問資源服務器,需要先獲得一個令牌(token)。由于用戶并不想直接將資源服務器的用戶名密碼透露給客戶端,用戶可以通過授權服務器給予客戶端一個臨時的受限訪問令牌。
客戶端在使用授權服務器之前必須先進行注冊(一次性操作),注冊的目的是讓授權服務器清楚之后的授權請求是由哪個客戶端發起的。同時注冊的時候也會約定好之后通信所使用的密鑰等信息。
客戶端在完成注冊之后,就可以通過下面將講到的OAuth 2流程來獲得令牌(token),然后通過令牌來訪問資源服務器上的資源。
可信域
在這個授權流程中,我們還需要注意可信域,這會幫助我們后面理解為什么OAuth 2 不合適作為認證工具??尚庞虼砹擞蛑薪M件的相互信任關系。
從下圖可以看出,默認情況下,資源服務器和授權服務器屬于同一個可信域。也就意味著,授權服務器知道資源服務器哪些資源需要被保護,資源服務器也知道如何驗證由授權服務器產生的令牌。授權服務器和資源服務器類似于一種強耦合的關系。此外,很顯然的,資源所有者和資源服務器也具有相互信任關系。
由于,上面提到的客戶端可以由第三方提供,所以其不需要和授權服務器或者資源服務器屬于同一個可信域。
OAuth 2涉及到的可信域
OAuth 2 流程
由于OAuth 2可以應用在不同的客戶端和場景,也就導致了OAuth 2有4種不同的流程。
前兩種流程涉及到了用戶的交互,需要用戶進行明確的授權許可。
授權碼流程(Authorization Code Flow)
使用最為廣泛的一種流程,基于瀏覽器的訪問基本都使用這種流程。
- 請求授權碼
- 請求令牌
- 訪問資源
簡化模式(Implicit Flow)
- 請求令牌
- 訪問資源
另外兩種屬于不需要進行任何的用戶交互。
密碼模式(Resource Owner Password Credential Flow)
這是類似于一些企業內部使用的授權模式。
- 使用資源所有者的用戶名密碼進行令牌請求
- 訪問資源
客戶端模式(Client Credential Flow)
這用于客戶端到服務器的通信。
- 使用客戶端的憑據進行令牌請求
- 訪問資源
這四種模式的具體流程,我們會在之后的文章中進行詳細介紹。
參考
RFC 6749 – The OAuth 2 2.0 Authorization Framework
總結
以上是生活随笔為你收集整理的oauth2 access_denied 不允许访问_OAuth 2 是什么-入门介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 最新人行LPR利率是多少?LPR利率查询
- 下一篇: 搜索不包含关键词_亚马逊listing关