【发布时间】:2018-09-16 02:19:04
【问题描述】:
我正在尝试对 IdentityServer4 的客户端机密使用公钥/私钥而不是共享机密。这种方法记录在here。
如果它是共享密钥,则请求将包含纯文本形式的 secret。例如
curl -X POST \
http://<identityserver>/connect/token \
-F client_id=abc \
-F client_secret=secret \
-F grant_type=client_credentials \
-F scope=api1 api2
我的问题是:应该使用公钥/私钥身份验证方法作为secret 传递什么?
为了提供一些背景知识,使用公钥/密钥身份验证的客户端将通过以下步骤向 IdentityServer 注册
-
客户端生成一个
.crt文件,例如// create key $ openssl genrsa -des3 -passout pass:x -out client.pass.key 2048 $ openssl rsa -passin pass:x -in client.pass.key -out client.key // create certificate request (csr) $ openssl req -new -key client.key -out client.csr // create certificate (crt) $ openssl x509 -req -sha256 -days 365 -in client.csr -signkey client.key -out client.crt // export pfx file from key and crt $ openssl pkcs12 -export -out client.pfx -inkey client.key -in client.crt 客户端将与 IdentityServer 共享
client.crt文件-
IdentityServer 将通过以下方式注册客户端
var client = new Client { ClientId = "abc", ClientSecrets = { new Secret { Type = IdentityServerConstants.SecretTypes.X509CertificateBase64, Value = "MIIDF...." <================= contents of the crt file } }, AllowedGrantTypes = GrantTypes.ClientCredentials, AllowedScopes = { "api1", "api2" } };
【问题讨论】:
-
您提到了一个
server.crt文件。它是一个错字还是一个不同的文件?哪个是用作客户端机密的 crt 文件(我猜是client.crt)? -
抱歉打错了.. 已修复
标签: c# asp.net-core identityserver4 identityserver3