我正在尝试使用公共/私有密钥来代替IdentityServer4中客户端密钥的共享秘密。可以在这里找到此方法的文档。
如果是共享秘密,请求将包含明文的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
)? - fra