<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          還在手動對參數(shù)進行簽名校驗?太落后了吧!

          共 1977字,需瀏覽 4分鐘

           ·

          2020-11-05 19:35

          有做過開放平臺的同學肯定知道,對外的 API 都要做簽名校驗,防止重放等來保證安全性。既然是統(tǒng)一的校驗,那就沒必要讓每個開發(fā)接口的同學都去手動的進行校驗,這個時候我們需要統(tǒng)一進行簽名的校驗和重放的校驗。

          今天給大家推薦一個 API 校驗的框架,通過注解和切面的方式自動進行簽名校驗,并且支持自定義算法,使用簡單,我強調(diào)一下,大家如果要用于自己的項目中,可以下載源碼稍微改造下,因為我覺得還有些地方?jīng)]有處理好,當然大家可以借鑒這個項目的思路,還是不錯的。

          集成框架

          可以直接使用作者已經(jīng)上傳了的 jar 包,當然你也可以自己下載源碼編譯。


          cn.oever
          api-signed
          0.0.1

          添加配置信息,主要配置加密算法和 Redis 信息,因為這個項目用到了 Redis 做防止重放。

          server:
          port: 8080
          oever:
          signature:
          time-diff-max: 300
          algorithm: HmacSHA1
          spring:
          redis:
          host: 127.0.0.1
          port: 6379
          password:

          time-diff-max:調(diào)用方與服務器時間戳允許的最大差值,單位秒,默認值 10 秒。時間戳校驗肯定會出現(xiàn)客戶端和服務端不一致的情況,我們允許一定的差值,超過了就證明是過期的請求。

          algorithm:MAC 算法的標準名稱

          spring.redis:就是 Redis 的配置信息,請注意前面加 spring,在作者文檔中沒有加 spring。

          在啟動類上添加簽名掃描注解@SignedScan,注解中會做自動裝配的工作。

          @SpringBootApplication
          @SignedScan
          public class Application {
          public static void main(String[] args) {
          SpringApplication.run(Application.class, args);
          }
          }

          簽名校驗

          在要進行簽名的接口上增加@SignedMapping 注解,也可以放在類上。簽名參數(shù)信息可以用框架自帶 SignedParam 類,也可以自定義,自定義的話再自己的類上通過注解的方式標識 appId 等信息即可。

          @RequestMapping("base")
          @SignedMapping
          public String base(@RequestBody SignedParam signedParam) {
          logger.info("The request data is :" + signedParam.getData());
          return "Base test is ok.";
          }

          參數(shù)類:

          @SignedEntity
          public class SignedParam {
          @SignedAppId
          private String appId;
          private String data;
          @SignedTimestamp
          private long timestamp;
          @SignedNonce
          private int nonce;
          @Signature
          private String signature;
          }

          然后就可以測試接口了,填寫對應的認證信息,簽名需要根據(jù)算法將參數(shù)進行簽名,后端校驗才能通過。

          圖片

          簽名步驟

          • 將請求參數(shù)依據(jù)參數(shù)名稱(首字母小寫)的 ASCII 序進行升序排列, 參與排序的參數(shù)包括除 signature 以外的所有請求參數(shù)。
          • 將排序后的請求參數(shù)依照參數(shù)名=參數(shù)值的形式格式化, 然后將各個參數(shù)依序用&符號拼接在一起, 得到待簽名字符串 plainText。
          appId=APP_ID_TEST&data={"userId":"test"}&nonce=-2028703096×tamp=1597415679
          • 以 HMAC-SHA1 算法為例對 plainText 進行加密, 再使用 Base64 對加密后的字節(jié)流進行編碼, 即得到了最終簽名 signature

            signature=base64_encode(hash_hmac('sha1', appSecret, true));

          項目地址

          還有自定義校驗規(guī)則等功能大家就自己去看文檔和源碼吧!

          掃下面二維碼,回復000獲取項目地址

          掃一掃
          瀏覽 73
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  人人干美女 | 极品AV在线 | 日日撸色丁香五月 | 91丨国产丨精品丨丝袜 | 五月情丁香五月情婷婷 |