㈠ Token是什麼
Token是服務端生成的一串字元串,以作客戶端進行請求的一個令牌,當第一次登錄後,伺服器生成一個Token便將此Token返回給客戶端,以後客戶端只需帶上這個Token前來請求數據即可,無需再次帶上用戶名和密碼。token其實說的更通俗點可以叫暗號,在一些數據傳輸之前,要先進行暗號的核對,不同的暗號被授權不同的數據操作。
基於Token的身份驗證的過程如下:
1、用戶通過用戶名和密碼發送請求。
2、程序驗證。
3、程序返回一個簽名的token 給客戶端。
4、客戶端儲存token,並且每次用於每次發送請求。
5、服務端驗證token並返回數據。
㈡ Spring boot-手把手教你使用Token
JWT由三部分組成,由類型和加密演算法的head(頭部),包含公共信息和自定義信息的playboard(負載),以及signature(簽名)組成。
就是頭部信息,這是由base64加密後的密文,base64是一種對稱加密演算法,解密後的json格式如下。頭部信息由type(類型)和 alg(加密演算法)組成。類型就是"JWT",加密演算法一般使用 HMAC SHA256加密演算法。
0 就是負載信息,加密後的json格式如下。負載信息一般由標准申明,公共聲明,私有聲明組成。
iss: jwt簽發者
sub: jwt所面向的用戶
aud: 接收jwt的一方
exp: jwt的過期時間,這個過期時間必須要大於簽發時間
nbf: 定義在什麼時間之前,該jwt都是不可用的.
iat: jwt的簽發時間
jti: jwt的唯一身份標識,主要用來作為一次性token,從而迴避重放攻擊。
公共的聲明和私有的聲明可以添加任何的信息,一般添加用戶的相關信息或其他業務需要的必要信息。但不建議添加敏感信息,因為該部分在客戶端可解密。
第三部分簽名是由base64加密後的頭部信息和負載信息以及secret組成的簽名,簽名演算法是有頭部信息定以的加密演算法,一般是HMAC SHA256。然後頭部,負載,簽名三部分組成了token。
pom.xml引入依賴
新增controller,提供token介面
CallbackService 生成token
返回的示例如下
定義自定義註解,在需要token校驗的方法上加上即可
新增AuthenticationInterceptor對第三方請求進行攔截,實現HandlerInterceptor介面
注冊AuthenticationInterceptor攔截器,對指定請求路徑進行攔截
在此文中,我們大致了解了Token的定義,獲取,校驗等方法。此外,Token 的無狀態,可擴展性,多平台跨域等特性,也讓Token廣泛應用在安全校驗領域中。在接下來的幾篇文章中,我將介紹如何使用Spring AOP進行加密,解密,驗簽等操作。
參考:
https://www.jianshu.com/p/576dbf44b2ae
㈢ 什麼是簽名伺服器和APP之間的API介面和數據怎麼保證安全
apk簽名相當於程序的身份識別代碼。
apk簽名用於程序編譯打包之後,手機在運行程序之前會先去驗證程序的簽名(可以看作類似於我們電腦上常說的md5)是否合法,只有通過了驗證的文件才會被運行,所以簽名軟體的作用的讓文件通過手機的驗證為合法,不同的手機、系統是對應不同的簽名的。
進行加密通訊防止API外部調用
伺服器端與客戶端各自會存儲一個TOKEN,這個TOKEN我們為了防止反編譯是用C語言來寫的一個文件並做了加殼和混淆處理。
在客戶端訪問伺服器API任何一個介面的時候,客戶端需要帶上一個特殊欄位,這個欄位就是簽名signature,簽名的生成方式為:
訪問的介面名+時間戳+加密TOKEN 進行整體MD5,並且客戶端將本地的時間戳作為明文參數提交到伺服器
伺服器首先會驗證這兩個參數:驗證時間戳,如果時間誤差與伺服器超過正負一分鍾,伺服器會拒絕訪問(防止被抓包重復請求伺服器,正負一分鍾是防止時間誤差,參數可調整),
然後伺服器會根據請求的API地址和提交過來的時間戳再加上本地存儲的token按照MD5重新生成一個簽名,並比對簽名,簽名一致才會通過伺服器的驗證,進入到下一步的API邏輯