使用Identity Server时测试Web API控制器

时间:2018-10-05 13:52:27

标签: asp.net-core-2.0 identityserver4

我有兴趣测试正在对Web api进行的特定调用,以确保它能够实现我期望的功能。在控制器中,我正在基于当前登录的用户ID搜索一些信息(身份验证由Identity Server处理)。运行该测试时,我希望已经有一个经过身份验证和登录的用户。如何模拟/绕过Identity进行的整个授权过程?

1 个答案:

答案 0 :(得分:0)

在Web api项目中正确设置身份验证处理程序时,来自访问令牌的声明将填充到HttpContext的User对象中:

services.AddAuthentication(options =>
{
    options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(options =>
{
    options.Authority = "https://<youridentityserver>";
    options.Audience = "yourapi";
    options.SaveToken = true;
});
public async Task<ActionResult> Get(string userName)
{
    //Does the subject claim match the user name?
    var subject = HttpContext.User.FindFirst(ClaimTypes.NameIdentifier);
    if ((subject == null) || (subject.Value != userName))
    return Unauthorized();

}

通过在单元测试中模拟HttpContext,可以在控制器方法中检查User对象。 如何模拟HttpContext:

Mock HttpContext for unit testing a .NET core MVC controller?