API鑑權及JWT詳細分析

Web API常見的鑑權方法,即WebAPI中保障請求合法性的常見方法:前端

(1)、API Key + API Secretweb

(2)、cookie-session認證redis

這是比較老牌的鑑權方式了,這種鑑權方式有一下特色:算法

A、爲了使後臺應用能識別是那個用戶發出的請求,只能在後臺服務器存儲一份用戶登錄信息,這份信息也會在相應前端請求時返回給瀏覽器,前端將其保存爲cookie.後端

B、下次請求時前端發送給後端應用,後端應用就能夠識別這個請求是來自那個用戶了。瀏覽器

C、cookie內僅包含一個session標識符而諸如用戶信息、受權列表等都保存在服務端的session中。安全

優勢:服務器

A、老牌,資料多,語言支持完善。cookie

B、較易於擴展,外部存儲session存儲方案一斤很是成熟了。(好比:redis)session

缺點:

1)性能相於較低:每個用戶通過後端應用認證以後,後端應用都要在服務端作一次記錄,以方便用戶下次請求的鑑別,一般而言session都是保存在內存中,而隨着認證用戶的增多,服務端的開銷會明顯增大。

2)與REST風格不匹配。由於它在一個無狀態協議裏注入了狀態。

3)CSRF攻擊:由於基於cookie來進行用戶識別, cookie若是被截獲,用戶就會很容易受到跨站請求僞造的攻擊。有興趣能夠看下http://www.uml.org.cn/Test/201508124.asp 。

4)很難跨平臺:在移動應用上 session 和 cookie 很難行通,你沒法與移動終端共享服務器建立的 session 和 cookie。

(3)、OAuth

(4)、token

簡述:token經過一次登錄驗證,獲得一個鑑權字符串,而後帶着這個鑑權字符串進行後續的操做,這樣就能夠解決每次請求都要帶着用戶名和密碼的問題,並且不用反覆使用用戶名和密碼。

A、Token的優點

token相對於Cookie+Session的有帶你,主要有下面兩個:

1.1CSTF攻擊

1.二、適合移動應用

移動端不支持Cookie,而token只要客戶端可以進行存儲就可以使用,所以Token在移動端上也具備優點。

1.三、Token的種類

通常來講Token主要有三種:

A、自定義Token:開發者根據業務邏輯自定義的Token

B、JWT:Json Web Token,定義在RFC 7519中的一種Token規範。

C、Oauth2.0:定義在RFC 6750中的一種受權規範,但這其實不是一種Token,只是其中也有用到Token。

(4)、JWT (JSON Web Tokens),是一種規範化的token,

4.一、組成:一個JWT token 是一個字符串,它由三部分組成,頭部、載荷與簽名,中間用 . 分隔,例如xxxxx.yyyyy.zzzzz

4.1.1頭部(header):由兩部分組成,令牌和類型(即JWT)和正在使用的簽名算法(如RSA).

4.1.二、載荷:公有的載荷,私有的載荷

4.1.三、簽名

4.二、使用

JWT的使用有兩種方式:

A、加到url中:?token=你token

B、加到Hearder中,建議用這種,由於在https狀況下更安全:Authorization:Bearer 你的token

JWT在客戶端有三種存儲方式:

A、LocalStorage

B、SessionStorage

C、Cookie[不能設置HttpPonly]

4.三、相對於通常的token的優勢

無狀態

A、JWT經常被用做保護服務端的資源(resource).

B、客戶端一般將JWT經過HTTP的Authorization header發送給服務端。

C、服務端使用本身保存的key計算、驗證簽名以判斷該JWT是否可信。

D、在web應用中,別再把JWT看成session使用,絕大多數狀況下,傳統的cookie-session機制工做的更好。

E、JWT適合一次性的命令認證,頒發一個有效期機端的JWT,即便暴露危險也很小。

F、因爲每次操做都會生成新的JWT,所以也沒有必要保存JWT,真正實現無狀態。

相關文章
相關標籤/搜索