【发布时间】:2017-08-12 21:16:15
【问题描述】:
我使用 MakeCert.exe 为我的内部开发目的创建了一个自签名证书
第 1 步: 我使用以下命令创建了根 CA
makecert -n "CN=Bala root signing authority" -cy authority -r -sv root.pvk root.cer
第 2 步: 使用以下命令安装在步骤 #1 中创建的根 CA 证书
certutil -user -addstore Root root.cer
第 3 步: 我使用以下命令创建了客户端证书
makecert -pe -n "CN=Bala Client" -a sha1 -cy end ^ -sky signature ^ -ic root.cer -iv root1.pvk ^ -sv Bala.pvk Bala.cer
第 4 步:
我使用以下命令为相应的客户端证书创建了一个.pfx 文件
pvk2pfx -pvk Bala.pvk -spc Bala.cer -pfx Bala.pfx
根 CA 即 "CN=Bala root signature authority" 具有所有预期用途,并安装在 Trusted Root Certification Authorities
根 CA 证书快照:“CN=Bala 根签名机构”
客户端证书快照:“CN=Bala Client”
客户端证书有一个指纹:"83021C2C20096FFD8415A353E471FF1BD39ECA4E"
请看截图:
我的 IdentityServer3 中有一个客户端,我使用了相同的指纹 "83021C2C20096FFD8415A353E471FF1BD39ECA4E"
new Client
{
ClientName = "Client Credentials Flow Client With Certificate",
Enabled = true,
ClientId = "cc.WithCertificate",
Flow = Flows.ClientCredentials,
ClientSecrets = new List<Secret>
{
new Secret
{
Value = "83021C2C20096FFD8415A353E471FF1BD39ECA4E",
Type = Constants.SecretTypes.X509CertificateThumbprint,
Description = "Client Certificate"
},
},
AllowedScopes = new List<string>
{
"read"
}
}
客户端控制台应用程序代码是
var cert = new X509Certificate2(@"Bala.pfx");
var handler = new WebRequestHandler();
handler.ClientCertificates.Add(cert);
string tokenEndPoint = ConfigurationManager.AppSettings["TokenEndpoint"];
var client = new TokenClient(
tokenEndPoint,
"cc.WithCertificate",
handler);
// Calling the Token Service
var response = client.RequestClientCredentialsAsync("read").Result;
响应对象的快照:
执行代码后,我会收到带有错误状态代码的响应:response.Error ="Forbidden"
我遵循了我在上一个问题response.Error "Forbidden" in IdentityServer3 Flows.ClientCredentials中所说的所有每个请求的设置
请帮助我如何使用 Self Signed Certificate 对应用程序进行身份验证。
【问题讨论】:
-
到目前为止你尝试过什么?你启用日志记录了吗?您可以通过 identityserver3 获取符号文件并进行调试,看看错误消息添加到哪里?或者请求在 IIS 被拒绝甚至没有进入托管代码?
标签: c# openid identityserver3 client-certificates self-signed