You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

IdentityServer4 Client Secret默认长度报错及超长client_secret发送方法问询

IdentityServer4 发送超过101字符client_secret的解决方法

IdentityServer4默认对client_secret的入参校验和存储长度限制为101字符,超过该长度会直接抛出Client_Invalid错误,可通过以下两种方案解决:

方案一:调整服务端长度限制(适用于需提交明文Secret的场景)

如果你的业务场景必须提交明文形式的长client_secret,可在服务端修改两处配置:

  • 修改入参长度校验阈值:在IdentityServer4服务注册代码中调整输入长度限制
builder.Services.AddIdentityServer(options =>
{
    // 按需调整为你需要的最大长度,建议和存储层配置保持一致
    options.InputLengthRestrictions.ClientSecret = 2000;
})
// 其余配置保留,比如AddInMemoryClients、AddConfigurationStore等
  • 若使用EF Core做配置存储,同步修改数据库字段长度限制:在配置DbContext的模型构造方法中修改ClientSecret的Value字段长度
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);
    modelBuilder.Entity<ClientSecret>(entity =>
    {
        entity.Property(p => p.Value).HasMaxLength(2000);
    });
}

修改后需要执行迁移并更新数据库配置。

方案二:提交哈希后的Secret值(更推荐,无需修改服务端默认配置)

IdentityServer4默认仅校验SHA256哈希后的Secret值,无需提交明文Secret。你可以先对长明文Secret做哈希处理,再将哈希值作为client_secret提交,生成的哈希值固定为44字符,远低于默认101的长度限制。

  • C# 哈希计算示例(可直接调用IdentityServer4内置扩展方法):
using IdentityServer4.Models;

// 输入为你的长明文Secret,输出为符合要求的哈希值
string hashedClientSecret = "你的长明文client_secret".Sha256();
  • 其他语言可自行实现SHA256哈希后转Base64字符串的逻辑即可。

注意:若采用此方案,服务端存储的Client Secret也需要对应为相同算法生成的哈希值,不能存明文。

内容的提问来源于stack exchange,提问作者rajquest

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 17:06:06