我正在使用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 = ...
}
});
答案 0 :(得分:0)
a)您需要在IIS上启用客户端证书 - 我们的主机已将此注释掉:
https://github.com/IdentityServer/IdentityServer3/blob/master/source/Host.Web/Web.config#L19
这将在成功进行HTTPS握手后填充OWIN SSL环境变量。
b)OpenID Connect中间件不会自动联系令牌端点。您需要手动执行此操作。这样您就可以配置要使用的客户端证书。这是一个示例: