集成测试 ASP.NET 使用 identityserver3 进行承载身份验证的 WebAPI 控制器
Integration testing ASP.NET WebAPI controllers that use bearer authentication with identityserver3
我正在尝试集成测试我的网络 api 控制器。该应用程序使用 JWT 针对资源服务器对用户进行身份验证。
为了加速应用程序,我使用了 Microsoft.OWIN.Testing 中的 TestServer。
我可以通过像浏览器一样执行登录来获得有效的 JWT。然后我继续将 JWT 添加到请求中,如下所示:
request.AddHeader("Authorization", "Bearer " + accessToken.RawData);
header 也到达 OWIN 管道。但是,所有控制器在调用时都受到 [Authorize]
属性 return 401 Unauthorized
的保护。
API 由 Thinktecture 使用 IdentityServer3 进行保护,相关部分如下所示:
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; await next() };
我正在尝试集成测试我的网络 api 控制器。该应用程序使用 JWT 针对资源服务器对用户进行身份验证。
为了加速应用程序,我使用了 Microsoft.OWIN.Testing 中的 TestServer。
我可以通过像浏览器一样执行登录来获得有效的 JWT。然后我继续将 JWT 添加到请求中,如下所示:
request.AddHeader("Authorization", "Bearer " + accessToken.RawData);
header 也到达 OWIN 管道。但是,所有控制器在调用时都受到 [Authorize]
属性 return 401 Unauthorized
的保护。
API 由 Thinktecture 使用 IdentityServer3 进行保护,相关部分如下所示:
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; await next() };