OAuth 2 0

2022-09-22 08:46:49 字數 2451 閱讀 6084

oauth是一個關於授權(authorization)的開放網路標準,在全世界得到廣泛應用,目前的版本是2.0版。

應用場景舉例:

先看一張圖:

程式設計師最常用的**之一就是**託管平臺,gitee是國內訪問速度最快的,**最全的**託管平臺之一。

先貼一張圖(摘自rfc 6749):

接下介紹一下圖中的名詞和內容:

為方便理解,假設小明利用github賬戶登入gitee;

四種角色:

resource owner:資源所有者,又稱“使用者”,上面例子中的小明;

resource server:資源伺服器,即服務提供商存放使用者生成的資源的伺服器。它與認證伺服器,可以是同一臺伺服器,也可以是不同的伺服器。即github提供小明資源的伺服器。

執行流程如下(參照上圖):

(a)使用者開啟客戶端以後,客戶端要求使用者給予授權。

(b)使用者同意給予客戶端授權。

(c)客戶端使用上一步獲得的授權,向認證伺服器申請令牌。

(d)認證伺服器對客戶端進行認證以後,確認無誤,同意發放令牌。

(e)客戶端使用令牌,向資源伺服器申請獲取資源。

(f)資源伺服器確認令牌無誤,同意向客戶端開放資源。

客戶端的授權模式:

oauth 2.0定義了四種授權方式。

本文主要講授權碼模式,授權碼模式是功能最完整、流程最嚴密的授權模式。它的特點就是通過客戶端的後臺伺服器,與"服務提供商"的認證伺服器進行互動。也是網路程式設計中通常使用的授權模式。

授權碼模式的步驟如下(參照上圖):

(a)使用者訪問客戶端,後者將前者導向認證伺服器。

(b)使用者選擇是否給予客戶端授權。

(c)假設使用者給予授權,認證伺服器將使用者導向客戶端事先指定的"重定向uri"(redirection uri),同時附上一個授權碼。

(d)客戶端收到授權碼,附上早先的"重定向uri",向認證伺服器申請令牌。這一步是在客戶端的後臺的伺服器上完成的,對使用者不可見。

(e)認證伺服器核對了授權碼和重定向uri,確認無誤後,向客戶端傳送訪問令牌(access token)和更新令牌(refresh token)。

下面是上面這些步驟所需要的引數。

a步驟中,客戶端申請認證的uri,包含以下引數:

下面是一個例子。

get /authorize?response_type=code&client_id=s6bhdrkqt3&state=xyz

&redirect_uri=https%3a%2f%2fclient%2eexample%2ecom%2fcb http/1.1

host: server.example.com

c步驟中,伺服器迴應客戶端的uri,包含以下引數:

下面是一個例子。

http/1.1 302 found

location:

&state=xyz

d步驟中,客戶端向認證伺服器申請令牌的http請求,包含以下引數:

下面是一個例子。

post /token http/1.1

host: server.example.com

authorization: basic czzcagrsa3f0mzpnwdfmqmf0m2jw

grant_type=authorization_code&code=splxlobezqqybys6wxsbia

&redirect_uri=https%3a%2f%2fclient%2eexample%2ecom%2fcb

e步驟中,認證伺服器傳送的http回覆,包含以下引數:

下面是一個例子。

http/1.1 200 ok

cache-control: no-store

"access_token":"2yotnfzfejr1zcsicmwpaa",

"token_type":"example",

"expires_in":3600,

"refresh_token":"tgzv3jokf0xg5qx2tlkwia",

"example_parameter":"example_value"

}

Twitter OAuth

開發者用這枚 code ,再加上自己的 apikey 和 api secret 去 post post 返回 access token 以後...

GRPC Oauth Identity

asp net core 3 0種需要匯入的identity包與core 2 2發生了些變化 microsoft aspnetcore di...

Oauth筆記

上週的工作有安全驗證這一塊,但不懂,只知道有幾個關鍵字oauth secret key token 簽名等。今天就查下資料做筆記。 oaut...