使用者登入及API介面設計

2021-08-28 12:01:30 字數 4223 閱讀 1122

原文:

這篇思路可以算目前主流設計方案,其中可能產生的疑惑點解析:

1、如果是web分離開發秘鑰可以採用非對稱加密;

2、安全性上面採用https(ps:在安全性要求不是非常嚴格的情況下,不用tls的「安全」,都是掩耳盜鈴)

---------------------------------------華麗的分割線----------------------------------------

1、web api的介面訪問分類

web api介面的訪問方式,大概可以分為幾類:

1)乙個是使用使用者令牌,通過web api介面進行資料訪問。這種方式,可以有效識別使用者的身份,為使用者介面返回使用者相關的資料,如包括使用者資訊維護、密碼修改、或者使用者聯絡人等與使用者身份相關的資料。

3)一種方式是提供公開的介面呼叫,不需要傳入使用者令牌、或者對引數進行加密簽名的,這種介面一般較少,只是提供一些很常規的資料顯示而已。

下面圖示就是這幾種接入方式的說明和大概應用場景。

2、web api使用安全簽名的實現

首先我們為使用者註冊的時候,需要由我們認可的終端發起,也就是它們需要進行安全簽名,後台確認簽名有效性,才能正常實現使用者註冊,否則遭到偽造資料,系統就失去原有的意義了。

/// /// 註冊使用者資訊介面

///

public inte***ce iuserapi

其實我們獲得使用者的令牌,也是需要進行使用者安全簽名認證的,這樣我們才有效保證使用者身份令牌獲取的合法性。

/// /// 系統認證等基礎介面

///

public inte***ce iauthapi

上面介紹到的引數,我們提及了幾個引數,乙個是加密簽名字串,乙個是時間戳,乙個是隨機數,乙個是應用接入id,我們一般的處理規則如下所示。

c#端**校驗如下所示。

/// /// 檢查應用接入的資料完整性

///

/// 加密簽名內容

/// 時間戳

/// 隨機字串

///

else

}#endregion

}return result;

}

第一步是驗證使用者的簽名是否符合要求,符合要求後進行使用者資訊的比對,並生成使用者訪問令牌資料json,返回給呼叫端即可。

3、web api使用安全令牌的實現

通過上面的介面,我們獲取到的使用者訪問令牌,以後和使用者相關的資訊呼叫,我們就可以通過這個令牌引數進行傳遞就可以了,這個令牌帶有使用者的一些基礎資訊,如使用者id,過期時間等等,這個token的設計思路**於json web token (jwt),具體可以參考以及github上的專案

由於web api的呼叫,都是一種無狀態方式的呼叫方式,我們通過token來傳遞我們的使用者資訊,這樣我們只需要驗證token就可以了。

jwt的令牌生成邏輯如下所示

令牌生成後,我們需要在web api呼叫處理前,對令牌進行校驗,確保令牌是正確有效的。

檢查的**,就是把令牌生成的過程逆反過來,獲取相應的資訊,並且對令牌簽發的時間進行有效性判斷,一般可以約定乙個失效時間,如1天或者7天,也不用設定太短。

/// /// 檢查使用者的token有效性

///

///

///

public checkresult validatetoken(string token)

//成功校驗

result.success = true;

result.errmsg = "";

result.userid = userid;

#endregion}}

catch (exception ex)

}return result;

}

一般來說,訪問令牌不能永久有效,對於訪問令牌的重新更新問題,可以設定乙個規則,只允許最新的令牌使用,並把它儲存在介面快取裡面進行對比,應用系統退出的時候,就把記憶體裡面的token移除就可以了。

4、asp.net web api的開發

上面我們定義了一般的web api介面,以及實現相應的業務實現,如果我們需要建立web api層,還需要構建乙個web api專案的。

建立好相應的專案後,可以為專案新增乙個web api基類,方便控制共同的介面。

然後我們就可以在controller目錄上建立更多的應用api控制器了。

最後我們為了統一所有的api介面都是返回json方式,我們需要對webapiconfig裡面的**進行設定下。

public static class webapiconfig

//",

defaults: new

);// remove the json formatter

// remove the xml formatter

config.formatters.remove(config.formatters.xmlformatter);}}

5、web api 介面的測試

接下來我們要做的就是需要增加業務介面,以便進行具體的測試了,建議使用winform專案,對每個介面進行乙個測試,或者也可以考慮使用單元測試的方式,看個人喜好吧。

例如我們如果要測試使用者登陸的介面的話,我們的測試**如下所示。

/// /// 生成簽名字串

///

/// 時間戳

/// 隨機數

private tokenresult gettokenresult()

如果我們已經獲得了令牌,我們根據令牌傳遞引數給連線,並獲取其他資料的測試處理**如下所示。

//獲取訪問令牌

如果需要post資料的話,那麼呼叫**如下所示。

//使用post方式

web api後台,會自動把post的json資料轉換為對應的物件的。

如果是get方式,我們可能可以直接通過瀏覽器進行除錯,如果是post方式,我們需要使用一些協助工具,如fiddler等處理工具,但是最好的方式是自己根據需要弄乙個測試工具,方便測試。

以下就是我為了自己web api 介面開發的需要,專門弄的乙個除錯工具,可以自動組裝相關的引數,包括使用安全簽名的引數,還可以把所有引數資料進行儲存。

api介面設計

請求模式也可以說是動作 資料傳輸方式,通常我們在web中的form有get post兩種,而在http中,存在下發這幾種。get 選擇 從伺服器上獲取乙個具體的資源或者乙個資源列表。post 建立 在伺服器上建立乙個新的資源。put 更新 以整體的方式更新伺服器上的乙個資源。patch 更新 只更新...

API介面設計

請求模式也可以說是動作 資料傳輸方式,通常我們在web中的form有get post兩種,而在http中,存在下發這幾種。get 選擇 從伺服器上獲取乙個具體的資源或者乙個資源列表。post 建立 在伺服器上建立乙個新的資源。put 更新 以整體的方式更新伺服器上的乙個資源。patch 更新 只更新...

API介面設計

目前 基本都是前後端分離的模式,如果前端使用vue等框架會產生跨域的問題,當產生跨域的時候,乙個介面會被訪問兩次,第一次會使用options訪問來判斷介面是否通,接下來才會使用指定的請求方式來訪問,那麼這樣怎麼辦呢?我們的共有controller就派上用場了,共有控制器裡面的建構函式 public ...