C# 集成测试使用带IdentityServer 3的承载身份验证的ASP.NET WebAPI控制器
我正在尝试集成测试我的web api控制器。应用程序使用JWTs根据资源服务器对用户进行身份验证 为了启动应用程序,我使用Microsoft.OWIN.Testing中的TestServer 我可以像浏览器一样通过登录来获得有效的JWT。然后,我继续将JWT添加到请求中,如下所示: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]-属性保护的控制
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()};
谢谢你的建议,我真的没想到。现在一切都很简单:-)