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

如何在IdentityServer4的.well-known配置中移除offline_access作用域

移除IdentityServer4元数据中的offline_access条目

下面提供两种可行的解决方法,按需选择:

方法一:通过自定义Discovery配置覆盖字段

在配置IdentityServer的代码中(.NET 6+在Program.cs,旧版本在Startup.cs的ConfigureServices),添加自定义逻辑过滤掉offline_access:

services.AddIdentityServer()
    // 保留你原有的配置,比如AddInMemoryApiScopes、AddInMemoryClients等
    .Configure<IdentityServerOptions>(options =>
    {
        // 自定义scopes_supported字段,覆盖默认值
        options.Discovery.CustomEntries.Add("scopes_supported", () =>
        {
            var allScopes = options.Discovery.GetScopeNames();
            // 过滤掉offline_access
            return allScopes.Where(scope => scope != "offline_access").ToList();
        });
    });

方法二:自定义Discovery响应生成器

这种方式更灵活,适合需要对元数据做更多自定义修改的场景:

  1. 创建自定义的响应生成器类:
public class CustomDiscoveryResponseGenerator : DefaultDiscoveryResponseGenerator
{
    public CustomDiscoveryResponseGenerator(
        IScopeRepository scopeRepository, 
        ILogger<DefaultDiscoveryResponseGenerator> logger, 
        IdentityServerOptions options, 
        IResourceStore resourceStore)
        : base(scopeRepository, logger, options, resourceStore)
    {
    }

    public override async Task<DiscoveryDocumentResponse> GenerateAsync(string baseUrl, string issuerUri = null)
    {
        // 先获取默认生成的元数据响应
        var response = await base.GenerateAsync(baseUrl, issuerUri);
        
        // 移除scopes_supported中的offline_access
        response.ScopesSupported?.Remove("offline_access");
        
        return response;
    }
}
  1. 在IdentityServer配置中替换默认的生成器:
services.AddIdentityServer()
    // 保留你原有的配置
    .AddDiscoveryResponseGenerator<CustomDiscoveryResponseGenerator>();

注意:以上操作仅隐藏元数据中的offline_access条目。如果需要完全禁止客户端请求该权限,还需确保所有客户端配置中未启用AllowOfflineAccess,且资源配置中不包含该scope。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 21:40:18