如何获取OpenIdConnectAuthenticationMiddleware以验证签名证书的有效日期?

时间:2016-02-09 02:19:47

标签: openid-connect katana adal identityserver3

我在混合流程中使用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一直查看代码到ADAL中的JwtSecurityTokenHandler,我无法看到过期检查。

我可以通过TokenValidationParameters.IssuerSigningKeyResolver上的SecurityTokenValidatedOpenIdConnectAuthenticationNotifications通知自行滚动内容,但看起来这应该是内置的内容。

有没有办法让Microsoft OIDC中间件验证签名证书过期?或者我错过了什么?

更新:鉴于布伦特的回答,这显然是gap in the functionality of JwtSecurityTokenHandler that Microsoft would like to fill。我只能说我现在看到这个,安装了v4.0.0(因为它是Microsoft.Owin.Security.OpenIdConnect NuGet包的依赖项。)

1 个答案:

答案 0 :(得分:1)

您需要从JwtSecurityTokenHandler派生,覆盖ValidateIssuerSecurityKey并检查签名。 OpenIdConnectOptions.SecurityTokenHandlers可用于设置处理程序。

修复后,这会更容易。 https://github.com/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/issues/329