我有一组基于AspNet WebApi的Web服务和一个基于IdentityServer3的身份验证服务。所有的Web服务都支持我们用于监视和诊断的简单服务信息端点。它报告服务版本和服务器名称。当前不支持服务信息端点的唯一服务是基于IdentityServer3的身份验证服务。
是否可以将简单的端点添加到基于IdentityServer3的服务中?布罗克·艾伦(Brock Allen)在GitHub issue 812中说:“我们有一种添加自定义控制器的方法,但是它没有文档记录,当前不受支持,而且还没有真正实现。我宁愿不采用那条未记载的,不受支持的路线。
是否可以修改/扩展发现端点以包括其他信息?
答案 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的服务中使用。