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

IdentityServer4客户端凭证认证API返回401 Unauthorized错误求助

排查步骤及对应解决方法

  • 第一步:验证AccessToken是否有效
    先在调用接口前打印你获取到的accessToken值,将内容复制到JWT解析工具中校验:

    • 是否存在scope声明,且值包含InventoryApi
    • iss声明值是否和你WebAPI配置的IdentityServerUri完全一致
    • 检查令牌是否已过期
      如果令牌为空,说明WebClient的OpenIdConnect配置未正确保存令牌,可检查登录时是否正常完成授权流程,是否同意了申请的所有Scope。
  • 第二步:检查ApiResource配置缺失问题
    IdentityServer4 4.x版本后,仅配置ApiScope不会自动生成对应的audience声明,你需要在Config.cs中补充ApiResource配置:

    public static IEnumerable<ApiResource> ApiResources =>
        new List<ApiResource>
        {
            new ApiResource("InventoryApi", "Inventory Management API")
            {
                Scopes = { "InventoryApi" }
            }
        };
    

    之后在IdentityServer注册时添加AddInMemoryApiResources(Config.ApiResources)(如果你用的是EF配置,需要将ApiResource数据同步到数据库中)。

  • 第三步:校验接口是否正确应用授权策略
    检查你的SitesController或者GetAllSites方法上是否添加了[Authorize(Policy = "ApiScope")]特性,如果漏加该特性,或者使用了默认的[Authorize],会出现校验不通过的情况。

  • 第四步:校验IdentityServer地址配置一致性
    检查你WebAPI配置文件中的IdentityServerUri值,是否和IdentityServer服务端配置的IssuerUri完全一致,需要保证协议、域名、端口三者都完全匹配,不一致会导致签发者校验失败返回401。

  • 第五步:开发环境补充JWT配置
    开发环境下可在WebAPI的AddJwtBearer配置中添加以下配置,避免HTTPS证书校验问题导致的401:

    options.RequireHttpsMetadata = false;
    
  • 可选:修正Swagger安全配置错误
    你当前Swagger的SecurityDefinition配置错误,Bearer认证的Header名称应该是Authorization而不是InventoryApi,修正代码如下:

    c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
    {
        In = ParameterLocation.Header,
        Description = "请输入Bearer认证令牌,格式为:Bearer {token}",
        Name = "Authorization",
        Type = SecuritySchemeType.ApiKey
    });
    

    这个问题不影响当前WebClient调用API的逻辑,只会影响Swagger调试的功能。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 11:45:01