具有混合认证流的客户端证书

时间:2016-09-05 16:36:14

标签: c# asp.net-mvc oauth-2.0 identityserver3 openid-connect

我正在使用IdentityServer3开发身份验证/授权服务器,到目前为止一切正常。

我试图通过X509Certificate来验证混合流客户端,而不是样本中的散列密码。

我的问题是:如何配置客户端应用程序以发送身份验证流程的证书?

我在X509CertificateSecretParser.cs的源代码中看到了获取客户端证书,owin环境变量" ssl.ClientCertificate"必须有一个值,但我找不到这个值的设置,即使在Microsoft.Owin源代码中也是如此。

我还尝试使用我在服务器上加载的证书作为客户端应用程序的SSL证书,但这也不起作用。

设置客户端密码的代码:

[my client].ClientSecrets.Add(new Secret
{
    Value = Convert.ToBase64String(cert.Export(X509ContentType.Cert)),
    Type = Constants.SecretTypes.X509CertificateBase64
});

客户端应用程序的身份验证设置代码:

app.UseOpenIdConnectAuthentication(new OpenIdConnectAuthenticationOptions
{
    Authority = ...,
    Scope = ...,
    ClientId = ...,
    RedirectUri = ...,
    ResponseType = "code id_token token",
    ClientSecret = "" , //What should I do with this?
    SignInAsAuthenticationType = "Cookies",
    Notifications = new OpenIdConnectAuthenticationNotifications
    {
        RedirectToIdentityProvider = ...,
        AuthorizationCodeReceived = ...
    }
});

1 个答案:

答案 0 :(得分:0)

a)您需要在IIS上启用客户端证书 - 我们的主机已将此注释掉:

https://github.com/IdentityServer/IdentityServer3/blob/master/source/Host.Web/Web.config#L19

这将在成功进行HTTPS握手后填充OWIN SSL环境变量。

b)OpenID Connect中间件不会自动联系令牌端点。您需要手动执行此操作。这样您就可以配置要使用的客户端证书。这是一个示例:

https://github.com/IdentityServer/IdentityServer3.Samples/blob/master/source/Clients/ClientCertificateConsoleClient/Program.cs#L26