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

Duende Identity Server 6请求客户端令牌报无效重定向URI错误

问题根因

客户端凭证(Client Credentials)授权流本身不需要传递、校验redirect_uri参数,触发Invalid redirect uri且日志显示redirectUri为null,本质是Identity Server的token端点没有将本次请求识别为标准客户端凭证流请求,转而触发了仅适用于授权码流、隐式流的重定向地址校验逻辑,常见触发场景有三类:

  • Identity Server侧对应client_id的客户端配置错误:未正确指定ClientCredentials为允许的授权类型,错误叠加了需要重定向校验的授权类型,或是误开启了RequireRedirectUri、RequirePkce等仅适用于交互式授权流的强制校验开关。
  • 客户端请求代码错误:构造ClientCredentialsTokenRequest时误传入了交互式授权流的相关参数,或是混用了其他授权流的请求构造逻辑,导致请求参数不符合客户端凭证流的格式要求,被端点识别为其他授权类型请求。
  • 依赖包版本不兼容:项目引用的IdentityModel Nuget包版本与Duende Identity Server 6版本不匹配,请求参数序列化异常,导致端点无法正确识别授权类型。
修复方案

按照以下顺序逐一排查修复:

  1. 修正Identity Server侧客户端配置
    定位到发起请求所用client_id对应的客户端配置项,确保配置符合客户端凭证流的要求,参考配置如下:
    new Client
    {
        ClientId = "实际使用的客户端ID",
        // 明确指定仅允许客户端凭证授权类型
        AllowedGrantTypes = GrantTypes.ClientCredentials,
        // 关闭仅适用于交互式流的强制校验开关
        RequirePkce = false,
        RequireRedirectUri = false,
        // 配置与客户端请求一致的密钥
        ClientSecrets = { new Secret("实际使用的客户端密钥".Sha256()) },
        // 配置客户端允许申请的API Scope
        AllowedScopes = { "需要访问的API Scope名称" }
        // 无需配置RedirectUris、PostLogoutRedirectUris等交互式流专属属性
    };
    
    配置修改后重启Identity Server站点生效。
  2. 修正客户端API Controller中的请求代码
    确保RequestClientCredentialsTokenAsync调用逻辑为客户端凭证流标准写法,不要混入其他授权流的参数,参考实现如下:
    // 建议通过依赖注入注入IDiscoveryCache、IHttpClientFactory实例,不要硬写Identity Server端点地址
    var discoveryDoc = await _discoveryCache.GetAsync();
    if (discoveryDoc.IsError)
    {
        throw new Exception($"元数据文档拉取失败:{discoveryDoc.Error}");
    }
    
    var httpClient = _httpClientFactory.CreateClient();
    var tokenResponse = await httpClient.RequestClientCredentialsTokenAsync(new ClientCredentialsTokenRequest
    {
        Address = discoveryDoc.TokenEndpoint,
        ClientId = "实际使用的客户端ID",
        ClientSecret = "实际使用的客户端密钥",
        Scope = "需要申请的API Scope名称"
        // 不要在此处赋值RedirectUri等非客户端凭证流参数
    });
    
    if (tokenResponse.IsError)
    {
        throw new Exception($"Token请求失败:{tokenResponse.Error},错误详情:{tokenResponse.ErrorDescription}");
    }
    
  3. 校验依赖包版本
    如果以上配置、代码均无问题,检查客户端项目引用的IdentityModel包版本,升级到与Duende Identity Server 6适配的6.x稳定版本,避免低版本参数序列化异常导致的识别错误。

完成以上操作后重新发起请求,即可正常获取Access Token,不会再触发重定向地址校验错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 20:06:26