由于 app_offline.htm 有时使用发现端点,IIS 中的 IdentityServer4 被回收
IdentityServer4 in IIS being recycled due to app_offline.htm when using discovery endpoint sometimes
根据 Windows 应用程序日志,由于 app_offline.htm,我在 IIS 中托管的 IdentityServer 似乎被回收了。它似乎有时会在请求 Discovery 端点时发生,但我无法推断出它何时发生或不发生的任何明显模式。
活动说明为:
Application 'C:\Users\IP21Admin\Desktop\sts\' was recycled after detecting app_offline.htm.
IdentityServer 日志中的最后几个日志条目是:
[2021-01-14 17:01:32 DBG] IdentityServer4.Hosting.EndpointRouter
Request path /.well-known/openid-configuration/jwks matched to endpoint type Discovery
[2021-01-14 17:01:32 DBG] IdentityServer4.Hosting.EndpointRouter
Endpoint enabled: Discovery, successfully created handler: IdentityServer4.Endpoints.DiscoveryKeyEndpoint
[2021-01-14 17:01:32 INF] IdentityServer4.Hosting.IdentityServerMiddleware
Invoking IdentityServer endpoint: IdentityServer4.Endpoints.DiscoveryKeyEndpoint for /.well-known/openid-configuration/jwks
[2021-01-14 17:01:32 DBG] IdentityServer4.Endpoints.DiscoveryKeyEndpoint
Start key discovery request
我发现有人在 ASPNET 核心存储库中作为问题发布了一个类似的问题:
https://github.com/dotnet/aspnetcore/issues/21528
我尝试使用进程监视器查找 app_offline.htm 的来源,但每个条目都是 w2wp.exe 操作 'CreateFile' 结果 'NAME NOT FOUND'。
Process Monitor Output
我试过手动输入我自己的 app_offline.htm,进程监视器将提供完全不同的操作,这让我怀疑之前实际上并没有创建 app_offline.htm。也许 Windows 应用程序事件具有误导性并且发生了某种崩溃?
有人对可能出现的问题有任何建议吗?
编辑:
因此,进一步研究后,IIS 中的 IdentityServer4 实例似乎在从令牌端点成功发出授权代码令牌后被回收。我连接了远程调试,看到当应用程序被回收时,IIS worker 的使用率为 100% CPU,并且应用程序的进程内存保持不变;不知道是不是有用的信息。
问题的症状是,当我的客户端 GUI 应用程序的 OidcClient 在获取授权代码令牌后继续从 UserInfo 端点获取 UserInfo 时;在 UserInfo 之前,由于“服务器已关闭”,它尝试加载发现文档失败。
也许 TokenEndpoint 导致中间件卡住或导致回收的原因?我假设服务器无法响应 DiscoveryEndpoint 请求,因为 TokenEndpoint 请求中(或之后)的某些内容导致服务器应用程序在响应 DiscoveryEndpoint 请求之前被回收。
经过今天的尝试,日志现在结束于:
[2021-01-15 13:01:23 DBG] IdentityServer4.Endpoints.TokenEndpoint
Token request success.
[2021-01-15 13:01:23 VRB] IdentityServer4.Hosting.IdentityServerMiddleware
Invoking result: IdentityServer4.Endpoints.Results.TokenResult
原来的问题是,如果目录中的任何文件发生更改,IIS 会自动回收应用程序。我在请求期间写入的文件夹中有一些日志文件和 SQLite 文件。
根据 Windows 应用程序日志,由于 app_offline.htm,我在 IIS 中托管的 IdentityServer 似乎被回收了。它似乎有时会在请求 Discovery 端点时发生,但我无法推断出它何时发生或不发生的任何明显模式。
活动说明为:
Application 'C:\Users\IP21Admin\Desktop\sts\' was recycled after detecting app_offline.htm.
IdentityServer 日志中的最后几个日志条目是:
[2021-01-14 17:01:32 DBG] IdentityServer4.Hosting.EndpointRouter
Request path /.well-known/openid-configuration/jwks matched to endpoint type Discovery
[2021-01-14 17:01:32 DBG] IdentityServer4.Hosting.EndpointRouter
Endpoint enabled: Discovery, successfully created handler: IdentityServer4.Endpoints.DiscoveryKeyEndpoint
[2021-01-14 17:01:32 INF] IdentityServer4.Hosting.IdentityServerMiddleware
Invoking IdentityServer endpoint: IdentityServer4.Endpoints.DiscoveryKeyEndpoint for /.well-known/openid-configuration/jwks
[2021-01-14 17:01:32 DBG] IdentityServer4.Endpoints.DiscoveryKeyEndpoint
Start key discovery request
我发现有人在 ASPNET 核心存储库中作为问题发布了一个类似的问题: https://github.com/dotnet/aspnetcore/issues/21528
我尝试使用进程监视器查找 app_offline.htm 的来源,但每个条目都是 w2wp.exe 操作 'CreateFile' 结果 'NAME NOT FOUND'。 Process Monitor Output
我试过手动输入我自己的 app_offline.htm,进程监视器将提供完全不同的操作,这让我怀疑之前实际上并没有创建 app_offline.htm。也许 Windows 应用程序事件具有误导性并且发生了某种崩溃?
有人对可能出现的问题有任何建议吗?
编辑: 因此,进一步研究后,IIS 中的 IdentityServer4 实例似乎在从令牌端点成功发出授权代码令牌后被回收。我连接了远程调试,看到当应用程序被回收时,IIS worker 的使用率为 100% CPU,并且应用程序的进程内存保持不变;不知道是不是有用的信息。
问题的症状是,当我的客户端 GUI 应用程序的 OidcClient 在获取授权代码令牌后继续从 UserInfo 端点获取 UserInfo 时;在 UserInfo 之前,由于“服务器已关闭”,它尝试加载发现文档失败。
也许 TokenEndpoint 导致中间件卡住或导致回收的原因?我假设服务器无法响应 DiscoveryEndpoint 请求,因为 TokenEndpoint 请求中(或之后)的某些内容导致服务器应用程序在响应 DiscoveryEndpoint 请求之前被回收。
经过今天的尝试,日志现在结束于:
[2021-01-15 13:01:23 DBG] IdentityServer4.Endpoints.TokenEndpoint
Token request success.
[2021-01-15 13:01:23 VRB] IdentityServer4.Hosting.IdentityServerMiddleware
Invoking result: IdentityServer4.Endpoints.Results.TokenResult
原来的问题是,如果目录中的任何文件发生更改,IIS 会自动回收应用程序。我在请求期间写入的文件夹中有一些日志文件和 SQLite 文件。