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

IdentityModel/IdentityServer4验证会话有效性时内省返回未认证错误

问题原因及解决方案

核心原因(出现概率最高)

内省端点的认证凭证使用错误。IdentityServer的令牌内省端点要求使用API资源的凭证进行认证,而非你申请令牌时使用的客户端(Client)凭证。你当前代码中TokenIntrospectionRequest传入的ClientId、ClientSecret是客户端的凭证,自然会被内省端点判定为未认证。

其他可能原因

  • IdentityServer侧未给对应API资源配置Secret,或配置的Secret与请求时传入的不匹配
  • 令牌的aud(受众)声明不包含你用于调用内省端点的API资源名称
  • 你使用的HttpClient实例提前携带了其他Authorization请求头,和内省请求自动生成的认证头冲突
  • IdentityServer配置了内省端点仅允许HTTPS访问,你使用HTTP地址请求被拦截

对应解决步骤

  1. 首先检查IdentityServer配置,确保你要保护的API资源(对应你代码中申请的api1 scope)已经配置了ApiSecret,示例配置参考:
// IdentityServer侧配置
new ApiResource("api1", "我的API资源")
{
    Scopes = { "api1" },
    ApiSecrets = { new Secret("your_api_secret".Sha256()) }
}
  1. 修改内省请求的凭证,将原来的客户端ClientId、ClientSecret替换为API资源的名称和对应Secret:
var introspectionResponse = await _http.IntrospectTokenAsync(new TokenIntrospectionRequest
{
    Address = discovery.IntrospectionEndpoint,
    ClientId = "api1", // 替换为你的API资源名称,不是客户端ID
    ClientSecret = "your_api_secret", // 替换为你给API资源配置的Secret
    Token = response.AccessToken
});
  1. 排查HttpClient实例是否有全局默认认证头配置,如果有可以在发起内省请求前清空,或者使用新的HttpClient实例发起内省请求
  2. 本地测试时如果使用HTTP地址,确保IdentityServer配置中关闭了HTTPS强制校验,开发环境可添加如下配置:
builder.Services.AddIdentityServer(options =>
{
    options.Authority = "http://localhost:5000";
    options.RequireHttpsMetadata = false; // 开发环境关闭HTTPS要求
})
// 其余配置...

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 06:15:05