一、前言
開發提供數據的WebApi服務,最重要的是數據的安全性。那么對于我們來說,如何確保數據的安全將會是需要思考的問題。在ASP.NET WebService服務中可以通過SoapHead驗證機制來實現,那么在ASP.NET WebApi中我們應該如何保證我們的接口安全呢?這次給大家分享一種基于JWT方式解決方案。
1.1、本次分享包含知識點如下:
1)、對ASP.NET WebApi 如何實現身份認證進一步了解和學習。
2)、掌握.NET中的JWT組件的基本運用。
3)、.NET開源輕量級HTTP網絡請求框架RestSharp在ASP.NET WebApi中的基本運用。
4)、ASP.NET WebAPI自定義HTTP參數綁定支持多參數POST請求。(強烈推薦)
5)、ASP.NET WebApi 基于JWT實現Token簽名認證。
1.2、一句話總結:今天我們要解決的問題?
ASP.NET WebAPI如何保證客戶端以安全的方式進行訪問。
廢話不多說,直接上干貨,我們不生產干貨,我們只是干貨的搬運
二、概念名稱含義介紹
2.1、什么是JWT?
JSON Web Token (JWT)是一個開放標準(RFC 7519),它定義了一種緊湊的、自包含的方式,用于作為JSON對象在各方之間安全地傳輸信息。該信息可以被驗證和信任,因為它是數字簽名的。
2.2、JWT長什么樣?
JWT是由三段信息構成的,將這三段信息文本用.鏈接一起就構成了Jwt字符串。
?
JWT結構體
2.3、JWT的構成
第一部分我們稱它為頭部(header),第二部分我們稱其為載荷(payload,),第三部分是簽證(signature).
Header
header典型的由兩部分組成:token的類型(“JWT”)和算法名稱(比如:HMAC SHA256或者RSA等等)。
例如:
? }
JWT結構Header
?
然后,用Base64對這個JSON編碼就得到JWT的第一部分
Payload
JWT的第二部分是payload,它包含聲明(要求)。聲明是關于實體(通常是用戶)和其他數據的聲明。
聲明有三種類型: registered, public 和 private。
Registered claims : 這里有一組預定義的聲明,它們不是強制的,但是推薦。比如:iss (issuer), exp (expiration time), sub (subject), aud (audience)等。
Public claims : 可以隨意定義。
Private claims : 用于在同意使用它們的各方之間共享信息,并且不是注冊的或公開的聲明。
下面是一個例子:
}
對payload進行Base64編碼就得到JWT的第二部分
注意,不要在JWT的payload或header中放置敏感信息,除非它們是加密的。
Signature
為了得到簽名部分,你必須有編碼過的header、編碼過的payload、一個秘鑰,簽名算法是header中指定的那個,然對它們簽名即可。例如:HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)簽名是用于驗證消息在傳遞過程中有沒有被更改,并且,對于使用私鑰簽名的token,它還可以驗證JWT的發送方是否為它所稱的發送方。?
三、WebApi基于JWT實現Token簽名認證原理講解
3.1、ASP.NET WebAPI如何保證客戶端以安全的方式進行訪問
ASP.NET WebAPI?如何保證接口的安全?先說一下何為安全?我們需要解決什么問題?
調用安全:由于WebService是暴露在公網中,怎么防止非法用戶調用我們的服務呢?因此我們需要解決:認證問題。
數據傳輸安全:由于我們的數據都是通過明文在網絡上進行傳輸很容易被竊取到。因此我們需要解決:數據被竊取問題。
以上解釋僅僅是阿笨狹義的理解;網絡安全還包括很多方面,會話劫持、會話被篡改等等。
總結:我們可以通過Token驗證機制來保證WebAPI?的認證使用;可以通過HTTPS來保證數據的加密,防止網絡偵聽!
?
基于JWT實現Token簽名認證原理圖
?
3.2、基于JWT實現Token簽名認證基本思路如下:
基本流程上是這樣的:
●用戶使用用戶名密碼來請求服務器。
●服務器進行驗證用戶的信息。
●服務器通過驗證發送給用戶一個token。
●客戶端存儲token,并在每次請求時附送上這個token值。
●服務端驗證token值,并返回數據。
四、實戰源碼在線實例演示
?
登錄
?
?
基于JWT實現Token簽名認證
?
?
五、總結
本次分享課程《ASP.NET WebApi 基于JWT實現Token簽名認證》阿笨給大家分享了在寫開放的WebAPI接口時是如何保證數據的安全性的?在此總結一下需要注意的幾點事項:
一、JTW注意事項:?
1)、不應該在jwt的payload部分存放敏感信息,因為該部分是客戶端可解密的部分。
2)、保護好secret私鑰,該私鑰非常重要。
3)、如果可以,請使用https協議。
注意:secret是保存在服務器端的,jwt的簽發生成也是在服務器端的,secret就是用來進行jwt的簽發和jwt的驗證,所以,它就是你服務端的私鑰,在任何場景都不應該流露出去。一旦客戶端得知這個secret, 那就意味著客戶端是可以自我簽發jwt了。
二、JWT具備的優勢特點如下:
1)、安全性比較高,加上密匙加密而且支持多種算法。
2)、攜帶的信息是自定義的,而且可以做到驗證token是否過期。
3)、驗證信息可以由前端保存,后端不需要為保存token消耗內存。
俗話說的好:師父領進門修行在個人,希望大家在學習的道路上一直堅持下去!