通过TestServer测试用[Authorize]属性修饰的Controller

时间:2017-04-24 06:51:14

标签: asp.net-web-api asp.net-core oauth-2.0 authorize-attribute .net-security

我的应用程序是ASP.NET Core 1.0 Web API。

我想用TestServer对象测试我的控制器。

我有一个用Authorize属性修饰的控制器类。

我如何获得我的testclient:

protected HttpClient GetTestClient(){
         var builder =
            new WebHostBuilder().UseContentRoot(this.path)
               .UseStartup<Startup>()
               .UseEnvironment("Development")
               .ConfigureServices(services => services.AddTransient<IAnInterface, AMock>());

         var server = new TestServer(builder);
         var client = server.CreateClient();

         return client;
      }

了解我如何使用它:

[TestMethod]
public void ShouldReturnSuccessful()
{
     var response = await this.client.PostAsync(Url, content);
     response.EnsureSuccessStatusCode();
}

如果我从控制器类中删除Authorize属性,那么我的测试工作正常,但如果设置了Authorize属性,我会得到System.Net.Http.HttpRequestException: Response status code does not indicate success: 401 (Unauthorized). 这是有道理的。

现在我知道我可以从Bearer Token请求TestServer并执行以下操作:

client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "My OAauth token");

但我不想通过token请求TestServer,因为我不想在我的应用中使用任何用户数据。我认为这是不好的做法。

我想知道是否有办法在我的代码中没有用户数据的情况下测试控制器?是否有任何解决方法使测试通过Authorize属性设置?

或者甚至可以在没有服务器身份验证的情况下通过Authorize?由于TestServer发送真正的HTTP-Packages并不意味着如果没有任何身份验证可以测试,攻击者无需身份验证就可以进入我的应用程序?

任何提示都受到高度赞赏,因为我现在已经有很多天这个问题了。

谢谢

0 个答案:

没有答案