我在混合流程中使用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
上的SecurityTokenValidated
或OpenIdConnectAuthenticationNotifications
通知自行滚动内容,但看起来这应该是内置的内容。
有没有办法让Microsoft OIDC中间件验证签名证书过期?或者我错过了什么?
更新:鉴于布伦特的回答,这显然是gap in the functionality of JwtSecurityTokenHandler
that Microsoft would like to fill。我只能说我现在看到这个,安装了v4.0.0(因为它是Microsoft.Owin.Security.OpenIdConnect
NuGet包的依赖项。)
答案 0 :(得分:1)
您需要从JwtSecurityTokenHandler派生,覆盖ValidateIssuerSecurityKey并检查签名。 OpenIdConnectOptions.SecurityTokenHandlers可用于设置处理程序。
修复后,这会更容易。 https://github.com/AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet/issues/329