我可以向基于Identity Server 3的服务添加服务信息/运行状况检查端点吗?

时间:2018-09-14 13:58:40

标签: extend identityserver3

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

是否可以将简单的端点添加到基于IdentityServer3的服务中?布罗克·艾伦(Brock Allen)在GitHub issue 812中说:“我们有一种添加自定义控制器的方法,但是它没有文档记录,当前不受支持,而且还没有真正实现。我宁愿不采用那条未记载的,不受支持的路线。

是否可以修改/扩展发现端点以包括其他信息?

1 个答案:

答案 0 :(得分:1)

这就是我最后编写代码的方式。在较高的级别上,基本上,我添加了一个Controllers文件夹,使用单个GET操作方法创建了AuthenticationServiceInfoController类,然后在启动过程中注册了该控制器。如上面的注释中所述,我的解决方案具有一些额外的复杂性,因为我的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的服务中使用。