天天看點

《ASP.NET Core 與 RESTful API 開發實戰》-- (第8章)-- 讀書筆記(尾)

配置資料保護

在預設的情況下,資料保護 API 有自身的預設配置,如密鑰的儲存位置、密鑰的有效期、所使用的算法等

前面已經提到了密鑰的預設有效期以及用到的算法,對于密鑰的儲存位置,根據應用程式運作環境的不同,密鑰的儲存位置也不相同

儲存密鑰的檔案名為 kdy-{guid}.xml,其中 guid 是密鑰 ID

如果要修改密鑰的儲存位置,可以調用 IDataProtectionBuilder 接口的 PersistKeysToFileSystem 方法

如果要修改密鑰的有效期,可以調用 SetDefaultKeyLifetime 方法

如果要修改預設的加密算法與雜湊演算法,可以調用 UseCryptographicAlgorithms 方法

如果希望密文在多個應用程式之間共享,應該調用 SetApplicationName 方法來設定應用程式的名稱,并使要共享密鑰的應用程式具有同樣的名稱

使用者機密

在開發過程中,對于一些敏感資訊,應該避免直接寫在代碼或配置檔案中,可以通過環境變量與使用者機密實作

在 Visual Studio 中,右擊“解決方案管理器”中的“項目名稱”,在快捷菜單欄中選擇“管理使用者機密”

此時會打開一個 secrets.json 的 JSON 檔案,内容為空,同時在 .csporj 中,多出了如下節點

secrets.json 檔案主要用來存儲敏感資料,即使用者機密,主要針對開發環境

将使用者機密配置到系統更中

通路的時候在需要的位置注入 IConfiguration 接口即可

通過 .NET Core CLI 工具同樣也可以建立并管理使用者機密,首先在 .csproj 檔案中添加 UserSecretsId 節點,修改完項目後,在指令行提示符中切換到檔案所在位置,使用指令添加、删除、檢視配置項

CORS,全稱 Cross-Origin Resource Sharing (跨域資源共享),是一種允許目前域的資源能被其他域通路的機制

所謂同域,是指兩個 URL 有相同的協定、主機和端口,如果三項中有一項不同,那麼資源就會認為來自不同的域

對于跨域資源通路,CORS 會将它們分為兩種類型:簡單請求和非簡單請求

一個請求如果滿足以下所有條件,就是簡單請求:

請求方法為 GET、HEAD、POST 三者之一

如果請求方法為 POST,則 Content-Type 消息頭隻允許為這3項:application/x-www-form-urlencoded、multipart/form-data、text/plain

不包含自定義消息頭

如果不滿足其中任何一個條件,則為非簡單請求

如果是簡單請求,被請求的伺服器會判斷這個源是否包含在允許跨源通路的清單中,包含則允許通路

如果是非簡單請求,則在向伺服器發送實際請求之前,先發送一個 OPTIONS 方法的請求,以确認發送正式的請求是否安全

實作 CORS

添加服務到容器中

使用 UseCors 方法為整個應用程式提供 CORS 功能,需要注意,CORS 中間件應添加在任何可能會用到 CORS 功能的中間件之前

如果要允許任何源通路,則可以使用 AllowAnyOrigin 方法

類似的方法還有 AllowAnyMethod 和 AllowAnyHeader

除了在 UseCors 方法中建立 CORS 政策外,還可以在添加 CORS 服務時通過 CorsOptions 對象建立一個或多個政策

當建立多個政策後,使用 UseCors 方法就可以指定要使用的政策名稱

使用 CORS 中間件能夠為整個應用程式添加 CORS 功能,如果僅希望為 MVC 應用程式中的某個 Controller 或某個 Action 添加 CORS,那麼就需要 [EnableCors] 特性,此時應将 CORS 中間件從請求管道中移除

與 [EnableCors] 特性相反,[DisableCors] 特性能夠使 Controller 或 Action 禁用 CORS 支援

為防止 API 被惡意濫用,應考慮對 API 的請求進行限流

下例中的自定義中間件實作了限流功能,它限制每分鐘内使用同一方法對同一資源僅能發起10次請求

上述的中間件的實作借用了記憶體緩存來記錄以某一方法對某一資源通路的次數

由于中間件使用了記憶體緩存,是以確定将其服務添加進來

并将中間件添加到請求管道中,注意,需要将他放在處理 API 請求之前

RequestRateLimitingMiddleware 中間件僅是簡單地實作了限流功能,如果要為應用程式添加更複雜、更進階的限流功能,可借助第三方庫,如 AspNetCoreRateLimit,能夠根據 IP 位址或用戶端 ID 對請求進行限流,同時它也支援對不同的接口設定不同的通路限制

《ASP.NET Core 與 RESTful API 開發實戰》-- (第8章)-- 讀書筆記(尾)
《ASP.NET Core 與 RESTful API 開發實戰》-- (第8章)-- 讀書筆記(尾)

本作品采用知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協定進行許可。

歡迎轉載、使用、重新釋出,但務必保留文章署名 鄭子銘 (包含連結: http://www.cnblogs.com/MingsonZheng/ ),不得用于商業目的,基于本文修改後的作品務必以相同的許可釋出。

如有任何疑問,請與我聯系 ([email protected]) 。