Identity Server客户端api.client密钥验证失败 无法获取API令牌


故障说明
按上述配置操作后无法为API获取访问令牌,已确认未哈希的密码为ecret无拼写错误,哈希值中不存在'+'字符,已尝试将RequirePkce设置为false,开启Identity Server日志后唯一报错为:
Client secret validation failed for client:api.client.
排查与修复步骤
- 核对客户端密钥哈希的生成规则:Identity Server 4默认使用SHA256对原始密钥进行哈希后转Base64存储,你可以用对应代码生成
ecret的正确哈希值,和MongoDB中存储的哈希逐字符对比,不一致直接修改存储的哈希值即可。
参考C#生成正确哈希的代码示例:public static string HashSha256(string input) { using (var sha256 = SHA256.Create()) { var bytes = Encoding.UTF8.GetBytes(input); var hash = sha256.ComputeHash(bytes); return Convert.ToBase64String(hash); } } - 检查MongoDB中客户端配置的密钥属性:确认
ClientSecrets集合中对应条目的Type字段值为SharedSecret,类型错误会直接导致验证失败。 - 核对Postman请求参数:确认
client_id参数完全匹配配置中的api.client(区分大小写),client_secret参数为纯文本ecret,无前后空格、多余引号或转义字符。 - 排查哈希存储的转义问题:确认MongoDB中存储的哈希值没有遗漏Base64编码的
/、=等特殊字符,也没有出现存储时自动转义特殊字符的情况。 - 临时使用明文密钥验证问题环节:可临时将客户端配置中
ClientSecrets的Value改为明文ecret,确认明文可正常通过验证后,即可确定问题出在哈希值生成或存储环节,针对性修正即可。 - 确认配置范围:当前报错为客户端密钥验证失败,只需核对客户端配置下的
Secrets节点,无需调整API资源的密钥配置。
内容的提问来源于stack exchange,提问作者Vikash Agrawal
相关产品推荐
相关产品推荐

