一站式WebAPI與認證授權服務

2021-10-05 06:24:42 字數 3095 閱讀 5773

保護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。

如果需要在windows上進行服務部署,可以參考我之前寫的topshelf的文章。

token重新整理與吊銷。

註冊與手機/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資訊載入執行這個程式。第...