使用 TestServer 托管 ASOS
Hosting ASOS with TestServer
我有一个基于 AspNet.Security.OpenIdConnect.Server
的 OpenIdDict
身份验证服务器。设置按预期工作。
现在要进行一些流程集成;跨越整个后端架构的系统测试我使用 TestServer
class。
Why I test like this is another question
- 用最少的工作量覆盖最多的测试代码
- 已决定不进行单元测试...(他们说工作量太大)
- 真正的集成测试跨越更少的代码,当我想要实现良好的覆盖率时,也被视为大量工作
- 该测试基于一个框架,该框架使用域语言方法构建uild,这意味着我可以描述与我们当前的网络 api 测试相同的功能,对于 selenium 网络 ui 测试,用于 selenium 负载测试和 wpf ui 测试。
当我调用资源服务器的 Web api 端点时,授权想要加载 http://localhost/.well-known/openid-configuration
但失败了。
{"IDX10803: Unable to obtain configuration from: 'http://localhost/.well-known/openid-configuration'."})
这是我用于测试环境的 OpenIdConnectSettings:
- AllowInsecureHttp = true,
- RequireHttpsMetadata = false
我能否让服务器发出配置或我能否以其他方式提供配置?
使用 TestServer
需要注意的重要一点是,一切都发生在内存中:没有打开套接字来处理您的应用程序可能发送的 HTTP 请求。
不幸的是,OpenID Connect 客户端中间件(在内部使用 HttpClient
)无法知道这一点,并尝试向 OpenIddict 发送 "real" HTTP 请求以检索发现文档。
要解决此问题,推荐的方法是将 OIDC 中间件使用的默认反向通道处理程序替换为使用 TestServer.CreateHandler()
:
提供的内存中处理程序
app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions
{
Authority = "http://localhost:54540/",
RequireHttpsMetadata = false,
ClientId = "myClient",
ClientSecret = "secret_secret_secret",
BackchannelHttpHandler = server.CreateHandler()
});
注意:同样的方法也适用于 JWT 承载中间件和 aspnet-contrib 自省中间件。
我有一个基于 AspNet.Security.OpenIdConnect.Server
的 OpenIdDict
身份验证服务器。设置按预期工作。
现在要进行一些流程集成;跨越整个后端架构的系统测试我使用 TestServer
class。
Why I test like this is another question
- 用最少的工作量覆盖最多的测试代码
- 已决定不进行单元测试...(他们说工作量太大)
- 真正的集成测试跨越更少的代码,当我想要实现良好的覆盖率时,也被视为大量工作
- 该测试基于一个框架,该框架使用域语言方法构建uild,这意味着我可以描述与我们当前的网络 api 测试相同的功能,对于 selenium 网络 ui 测试,用于 selenium 负载测试和 wpf ui 测试。
当我调用资源服务器的 Web api 端点时,授权想要加载 http://localhost/.well-known/openid-configuration
但失败了。
{"IDX10803: Unable to obtain configuration from: 'http://localhost/.well-known/openid-configuration'."})
这是我用于测试环境的 OpenIdConnectSettings:
- AllowInsecureHttp = true,
- RequireHttpsMetadata = false
我能否让服务器发出配置或我能否以其他方式提供配置?
使用 TestServer
需要注意的重要一点是,一切都发生在内存中:没有打开套接字来处理您的应用程序可能发送的 HTTP 请求。
不幸的是,OpenID Connect 客户端中间件(在内部使用 HttpClient
)无法知道这一点,并尝试向 OpenIddict 发送 "real" HTTP 请求以检索发现文档。
要解决此问题,推荐的方法是将 OIDC 中间件使用的默认反向通道处理程序替换为使用 TestServer.CreateHandler()
:
app.UseOpenIdConnectAuthentication(new OpenIdConnectOptions
{
Authority = "http://localhost:54540/",
RequireHttpsMetadata = false,
ClientId = "myClient",
ClientSecret = "secret_secret_secret",
BackchannelHttpHandler = server.CreateHandler()
});
注意:同样的方法也适用于 JWT 承载中间件和 aspnet-contrib 自省中间件。