Могу ли я добавить информацию о службе / конечную точку проверки работоспособности в службу на базе Identity Server 3? - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть набор веб-сервисов на основе AspNet WebApi и сервис аутентификации на основе IdentityServer3. Все веб-сервисы поддерживают простую конечную точку служебной информации, которую мы используем для мониторинга и диагностики. Сообщается версия сервиса и имя сервера. Единственная служба, которая в настоящее время не поддерживает конечную точку информации службы, - это служба проверки подлинности на основе IdentityServer3.

Есть ли способ добавить простую конечную точку в службу на основе IdentityServer3? В выпуске GitHub 812 Брок Аллен говорит: «У нас есть способ добавить пользовательские контроллеры, но он недокументирован, в настоящее время не поддерживается и на самом деле не сделан». Я бы предпочел не следовать этому бездействующему, неподдерживаемому маршруту.

Есть ли способ изменить / расширить конечную точку обнаружения, включив в нее дополнительную информацию?

1 Ответ

0 голосов
/ 31 января 2019

Вот как я закончил кодировать это. На высоком уровне, в основном, я добавил папку Controllers, создал класс AuthenticationServiceInfoController с одним методом действия GET, а затем зарегистрировал этот контроллер во время запуска. Как отмечено в комментарии выше, мое решение имело некоторую дополнительную сложность, потому что мой 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();
}

И в моем методе Startup.Configuration, где я настраиваю Identity Server, я получил:

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

Я думаю, это все, что нужно. Он установлен и работает в моей службе на базе Identity Server 3.

...