我可以向基于 Identity Server 3 的服务添加服务信息/健康检查端点吗?

Can I add a service info / health check endpoint to my Identity Server 3-based service?

我有一组基于 AspNet WebApi 的 Web 服务和一个基于 IdentityServer3 的身份验证服务。所有 Web 服务都支持我们用于监控和诊断的简单服务信息端点。它报告服务版本和服务器名称。当前唯一不支持服务信息端点的服务是基于 IdentityServer3 的身份验证服务。

有没有办法向基于 IdentityServer3 的服务添加一个简单的端点?在 GitHub issue 812 Brock Allen 中说 "We have a way to add custom controllers, but it's undocumented, current unsupported, and not really done." 我宁愿不走那条有据可查、不受支持的路线。

有没有办法 modify/extend 发现端点包含更多信息?

以下是我最终编写代码的方式。在高层次上,我基本上添加了一个 Controllers 文件夹,使用单个 GET 操作方法创建了一个 AuthenticationServiceInfoController class,然后在启动期间注册了该控制器。如上面的评论所述,我的解决方案有一些额外的复杂性,因为我的 AuthenticationServiceInfoController 继承自其他地方定义的基本 ServiceInfoController,但我已尝试从该示例中消除它。因此,控制器代码如下所示:

[RoutePrefix("api/v1/serviceinfo")]
public class AuthencticationServiceInfoController : IServiceInfoController
{
    [Route("")]
    [Route("~/api/serviceinfo")]
    public IHttpActionResult Get()
    {
        try
        {
            ServiceInformation serviceInfo = new ServiceInformation();
            serviceInfo.ServiceVersion = Global.serviceVersion;

            return Ok(serviceInfo);
        }
        catch (Exception ex)
        {
            return InternalServerError(ex);
        }
    }
}

它实现了一个简单的接口:

public interface IServiceInfoController
{
    IHttpActionResult Get();
}

在我配置 Identity Server 的 Startup.Configuration 方法中,我得到了:

        var idSrvFactory = new IdentityServerServiceFactory();
        idSrvFactory.Register(new Registration<IServiceInfoController, Controllers.AuthencticationServiceInfoController>());

我想这就是全部。它已就位并在我的基于 Identity Server 3 的服务中工作。