Как я могу заставить OpenIdConnectAuthenticationMiddleware проверять даты действия сертификата подписи?

Я использую Microsoft OpenIdConnectAuthenticationMiddleware против IdentityServer3 в гибридном потоке. Я пропущу код установки IdentityServer3 (поскольку я не думаю, что здесь есть проблема), но вот код запуска проверяющей стороны:

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
    AuthenticationType = "Cookies"
});

var options = new OpenIdConnectAuthenticationOptions
{
    Authority = "https://localhost:44300/",
    ClientId = "hybridclient",
    ClientSecret = "secret",
    RedirectUri = "https://localhost:44301/",
    ResponseType = "code id_token",
    SignInAsAuthenticationType = "Cookies",
    Scope = "openid profile"
};

app.UseOpenIdConnectAuthentication(options);

Я заметил, что, когда IdentityServer3 использует для подписи сертификат с истекшим сроком действия - что он разрешает, но регулярно регистрирует как предупреждение - истечение срока действия сертификата игнорируется и аутентификация разрешена. Это кажется неправильным.

Я не знаю, чья это будет ответственность (OpenIdConnectAuthenticationMiddleware? ADAL?), Поскольку мне кажется, что это простой сбой аутентификации, когда срок действия сертификата подписи истек. Я просмотрел код от Katana до JwtSecurityTokenHandler в ADAL, и я не вижу, что срок действия проверяется.

Я могу что-нибудь накатить, либо в TokenValidationParameters.IssuerSigningKeyResolver, либо в SecurityTokenValidated уведомлении на OpenIdConnectAuthenticationNotifications, но похоже, что это должно быть что-то встроенное.

Есть ли способ, чтобы промежуточное ПО Microsoft OIDC проверяло истечение срока действия сертификата подписи? Или я что-то упускаю?

Обновление: учитывая ответ Брента, очевидно, что это пробел в функциональности JwtSecurityTokenHandler, который Microsoft хотела бы восполнить. Я могу только сказать, что вижу это сейчас, с установленной версией v4.0.0 (поскольку это зависимость от пакета Microsoft.Owin.Security.OpenIdConnect NuGet).


person Chris Simmons    schedule 09.02.2016    source источник


Ответы (1)


Вам нужно будет наследовать от JwtSecurityTokenHandler, переопределить ValidateIssuerSecurityKey и проверить подпись. OpenIdConnectOptions.SecurityTokenHandlers можно использовать для установки обработчика.

Когда починят, это будет проще. https://github.com/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/issues/329

person Brent Schmaltz    schedule 09.02.2016
comment
Я придумал нечто подобное. Спасибо за подтверждение! Я обновлю свой вопрос, чтобы выделить конкретную версию, к которой это относится. - person Chris Simmons; 09.02.2016