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

如何在ABP Framework 7.x中为同一client_id设置多个redirect_uri?

如何在OpenIddict中为同一client_id配置多个redirect_uri

OpenIddict完全支持为同一个client_id配置多个有效的redirect_uri,你直接修改数据库表不生效,大概率是因为没走正确的配置流程,或者OpenIddict的缓存没更新导致的。以下是几种可行的操作方式:

1. 通过OpenIddict官方API配置(推荐)

不管是创建新客户端还是更新已有客户端,都应该用OpenIddict提供的OpenIddictApplicationManager来操作,这样能保证配置被正确持久化并同步缓存:

创建新客户端时添加多个redirect_uri

await _applicationManager.CreateAsync(new OpenIddictApplicationDescriptor
{
    ClientId = "your-client-id",
    ClientSecret = "your-client-secret",
    RedirectUris =
    {
        new Uri("https://first-domain.com/callback"),
        new Uri("https://second-domain.com/callback")
    },
    // 其他必填配置(如授权类型、范围等)
});

更新已有客户端的redirect_uri

如果客户端已存在,先找到它再添加新的redirect_uri:

var application = await _applicationManager.FindByClientIdAsync("your-client-id");
if (application != null)
{
    // 添加新的redirect_uri
    await _applicationManager.AddRedirectUriAsync(application, "https://third-domain.com/callback");
    // 保存更改
    await _applicationManager.UpdateAsync(application);
}

2. 手动修改数据库的正确方式

如果一定要直接操作数据库,注意以下几点:

  • 检查OpenIddictApplications表的RedirectUris字段类型:如果是JSON格式存储(比如PostgreSQL的jsonb、SQL Server的nvarchar),需要把多个URI放在一个JSON数组里,示例值:
    ["https://first-domain.com/callback", "https://second-domain.com/callback"]
    
  • 修改后必须清理OpenIddict的缓存:可以直接重启应用,或者调用_applicationManager.PurgeAsync()方法清除所有应用缓存(注意这个操作会清除所有客户端的缓存,生产环境谨慎使用)。

3. 内存客户端配置方式(适用于开发环境)

如果用的是内存存储客户端,直接在Startup的配置中指定多个redirect_uri即可:

services.AddOpenIddict()
    .AddCore(options =>
    {
        options.UseEntityFrameworkCore()
               .UseDbContext<ApplicationDbContext>();
    })
    .AddServer(options =>
    {
        options.AllowAuthorizationCodeFlow()
               .SetAuthorizationEndpointUris("/connect/authorize")
               .SetTokenEndpointUris("/connect/token")
               .UseAspNetCore()
               .EnableAuthorizationEndpointPassthrough();
    })
    .AddInMemoryClients(clients =>
    {
        clients.Add(new OpenIddictApplicationDescriptor
        {
            ClientId = "your-client-id",
            ClientSecret = "your-client-secret",
            RedirectUris =
            {
                new Uri("https://first-domain.com/callback"),
                new Uri("https://second-domain.com/callback")
            }
        });
    });

注意事项

  • 所有redirect_uri必须是绝对URI(原生应用的自定义URI scheme除外,比如myapp://callback);
  • 避免直接手动修改数据库,除非是紧急调试场景,官方API才是最可靠的配置方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 19:52:21