在 ASP.NET Core Web API 集成測試一文中, 我介紹了ASP.NET Core Web API的集成測試. html
在那裏我使用了測試專用的Startup類, 裏面的配置和開發時有一些區別, 例如裏面去掉了用戶身份驗證相關的中間件.app
可是有些被測試的行爲裏面須要用到身份/受權信息.測試
因此本文就介紹一下在API集成測試中發送請求時使用Bearer Token做爲Authorization Header的狀況.debug
我這個項目裏生產時使用的是Identity Server 4, 而進行集成測試時使用Identity Server 4可能會不太方便, 因此我決定簡化一下, 把這項工做就僅限制在API和測試項目這兩個項目裏.調試
首先爲被測試系統添加受權/身份驗證中間件, 修改StartupIntegrationTest:htm
在ConfigureServices()方法裏, 首先添加一個權限策略, 要求全部的MVC Controller只有受權的用戶才能訪問.中間件
隨後使用AddAuthentication()添加身份驗證中間件, 並設置Bearer做爲方案, 經過AddJwtBearer()進行一些參數配置.blog
這裏須要用到一個secret, 由於測試項目會用到, 因此暫時我把它弄成靜態屬性了.token
最後在Configure()方法裏使用該中間件便可.開發
來到集成測試項目的TestServerFixture類, 先要要作的就是使用上面的secret生成token, 並在HttpClient裏設置Authorization Header便可:
生成token的代碼裏能夠設置Identity Claims. 這裏我只添加了Name和Role.
而後咱們試試, 找一個集成測試進行調試, 我使用的是VSCode, 點擊方法上面的debug:
我在被測試方法裏添加了一些傻代碼, 以便調試用戶信息:
查看Claims:
能夠看到在測試代碼裏設置了Identity Claims了, 說明使用Bearer Token成功了.
被測試系統使用了身份中間件: app.UserAnthentication(), 咱們也能夠測試一下這個中間件的功能, 若是Token不正確的話, 就應該返回401 UnAuthorized狀態碼:
這個測試代碼很簡單, 就是設置了一個不正確的token, 並Assert返回狀態碼是401.
該測試會經過:
文章略短, 就介紹到這.