保護webapi有哪些方法?
**網 www.laoyao.org
假設你的webapi使用jwt token來儲存你的認證資訊,並且通過jwt token進行保護。那麼我們可以設計乙個整合有認證授權的webapi服務,一站式解決問題,**簡單且方便自行修改。
要點:使用類似[authorize]的授權,需要基於token中role
這個claim來實現。
密碼的儲存需要進行特別設計。
使用者物件返回需要避免password和passwordhash的傳遞。
專案特點:
restful設計(正常來說api的資源應該是複數userinfos,但是info應該就是不可數的,不糾結了。)
整合swagger
asp.net core 3.1
nullable設計
ef core
使用者許可權控制
密碼安全儲存
token實現與api整合
簡單易於理解
所有認證之類的工作都在api這邊實現,因此我們需要乙個userinfo類來進行處理。
[datacontract]
[table("userinfo")]
public class userinfo
= default!;
//傳輸的過程中會用到密碼,但是這個密碼不應該被存入資料庫中。
[datamember]
public string? password
//傳輸的過程中不會用到密碼雜湊值,但是雜湊值需要存入資料庫中。
[ignoredatamember]
public string? passwordhash
[datamember]
public string? role
public static string getrole(string? role);}
}
具體實現tokencontroller如下。
}上面的類標誌有allowanonymous
,表示這個類是可以匿名訪問的,使用者先請求post請求token,然後再攜帶token訪問其他api。
上面用到乙個passwordstorage的庫,這個庫使用了加鹽雜湊的形式儲存了密碼,實踐上比較可靠。值得一提的是它的verifypassword()
函式,使用的比較演算法很巧妙,我貼在了文末,推薦大家閱讀。
被保護的使用者管理api如下,只貼了一小部分:
[enablecors("allowall")]
[route("api/[controller]")]
//只有角色為admin可以訪問
[authorize(roles = "admin")]
//如果需要增加種子資料,可以注釋上面這行,取消注釋下面這一行
//[allowanonymous]
[apicontroller]
public class userinfocontroller : controllerbase
/// /// 有參get請求
///
/// 使用者編號id
}
startup.cs注意一下順序的問題。
public void configureservices(iservicecollection services)
在configureservices裡面,呼叫了addnewtonsoftjson()
。之所以沒有使用到預設的system.text.json
,是因為它對客戶端上傳的資訊要求太嚴格,如果是integer型別的值,上傳使用了string就不能正確識別物件,而newtonsoft.json
沒有這個問題。
也可以修改system.text.json
的預設行為,但是總是沒有那麼方便了。
呼叫即可返回access_token與role。
需要設定header:
零零散散寫了這麼些,直接貼上**,專案是基於asp.net core 3.1與swagger的,本專案也可以作為一些小型專案的模板。
需要新建使用者的話,可以注釋掉[authorize]或者我已經準備了乙個使用者admin,密碼是123。token重新整理與吊銷。如果需要在windows上進行服務部署,可以參考我之前寫的topshelf的文章。
註冊與手機/email驗證。
密碼雜湊指南
加鹽雜湊指南
password-hashing
一站式WebAPI與認證授權服務
保護webapi有哪些方法?假設你的webapi使用jwt token來儲存你的認證資訊,並且通過jwt token進行保護。那麼我們可以設計乙個整合有認證授權的webapi服務,一站式解決問題,簡單且方便自行修改。要點 使用類似 authorize 的授權,需要基於token中role這個clai...
一站式電子商務
我是關注電子商務。但我偏電子。要時時提醒自己擅長的是it,自己是it人,而不是服裝行業或化妝品行業。至於賣影音的噹噹 賣數碼的京東 賣母嬰的紅孩子 賣化妝品的莎莎 賣居家的麥網,他們都是進貨賣貨,在網際網路這個世界充當國美蘇寧之類的角色。他們挾巨大的投資來打巨大的廣告吸引巨大的流量,然後和供貨商進行...
一站式程式設計筆記(17,18,19)
第17章 彙編器把文字檔案轉換成目標檔案.o 目標檔案由若干個section組成,我們在匯程式設計序中宣告的.section會成為目標檔案中的section 然後鏈結器把目標檔案的section合併成幾個segment,生成可執行檔案。最後載入器根據可執行檔案的segment資訊載入執行這個程式。第...