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,真正實現無狀態。