C# 集成测试使用带IdentityServer 3的承载身份验证的ASP.NET WebAPI控制器

C# 集成测试使用带IdentityServer 3的承载身份验证的ASP.NET WebAPI控制器,c#,asp.net-web-api,owin,identityserver3,C#,Asp.net Web Api,Owin,Identityserver3,我正在尝试集成测试我的web api控制器。应用程序使用JWTs根据资源服务器对用户进行身份验证 为了启动应用程序,我使用Microsoft.OWIN.Testing中的TestServer 我可以像浏览器一样通过登录来获得有效的JWT。然后,我继续将JWT添加到请求中,如下所示: request.AddHeader("Authorization", "Bearer " + accessToken.RawData); 该头也到达OWIN管道中。但是,所有受[Authorize]-属性保护的控制

我正在尝试集成测试我的web api控制器。应用程序使用JWTs根据资源服务器对用户进行身份验证

为了启动应用程序,我使用Microsoft.OWIN.Testing中的TestServer

我可以像浏览器一样通过登录来获得有效的JWT。然后,我继续将JWT添加到请求中,如下所示:

request.AddHeader("Authorization", "Bearer " + accessToken.RawData);
该头也到达OWIN管道中。但是,所有受
[Authorize]
-属性保护的控制器在调用时返回
401 Unauthorized

Thinktecture使用IdentityServer 3保护API,相关部分如下所示:

var authority = "http://localhost:8080/idsrv/";
var parameters = new TokenValidationParameters() { ValidAudiences = new[] { "implicitclient" } };

var options = new IdentityServerBearerTokenAuthenticationOptions
                    {
                        Authority = authority, 
                        TokenValidationParameters = parameters
                    };

app.UseIdentityServerBearerTokenAuthentication(options);

var configuration = new WebApiConfiguration(this.container);
configuration.Configuration(app);

我真的不知道在哪里可以找到任何指向问题的指针,因此非常感谢您的帮助。

您真的想使用令牌中间件进行测试吗?我的意思是-您不是在测试令牌中间件本身-而是基于某些身份验证结果的控制器逻辑

只需编写一个小型内联中间件,将
Context.Authentication.User
设置为您要使用的某个ClaimsPrincipal


app.Use(async(ctx,next)=>{ctx.Authentication.User=somePrincipal;wait next()};

谢谢你的建议,我真的没想到。现在一切都很简单:-)