ASP.NET Core Web API 整合測試中使用 Bearer Token

solenovex發表於2018-07-23

在 ASP.NET Core Web API 整合測試一文中, 我介紹了ASP.NET Core Web API的整合測試. 

在那裡我使用了測試專用的Startup類, 裡面的配置和開發時有一些區別, 例如裡面去掉了使用者身份驗證相關的中介軟體.

但是有些被測試的行為裡面需要用到身份/授權資訊.

所以本文就介紹一下在API整合測試中傳送請求時使用Bearer Token作為Authorization Header的情況.

 

整合測試中使用Bearer Token

我這個專案裡生產時使用的是Identity Server 4, 而進行整合測試時使用Identity Server 4可能會不太方便, 所以我決定簡化一下, 把這項工作就僅限制在API和測試專案這兩個專案裡.

 

首先為被測試系統新增授權/身份驗證中介軟體, 修改StartupIntegrationTest:

在ConfigureServices()方法裡, 首先新增一個許可權策略, 要求所有的MVC Controller只有授權的使用者才能訪問.

隨後使用AddAuthentication()新增身份驗證中介軟體, 並設定Bearer作為方案, 通過AddJwtBearer()進行一些引數配置.

這裡需要用到一個secret, 因為測試專案會用到, 所以暫時我把它弄成靜態屬性了.

最後在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.

 

該測試會通過:

 

文章略短, 就介紹到這.

 

相關文章