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

如何从Web服务调用受IS4保护的用户列表接口?

如何实现后端服务向IdentityServer4的授权API发起调用

问题分析

你碰到的404其实不是真的接口不存在——IS4默认的[Authorize]是针对用户登录场景的Cookie认证流程,而后端服务调用IS4 API应该用Bearer令牌的本地API认证机制。加了默认[Authorize]后,IS4会把请求重定向到登录页,客户端就识别成了404错误。

解决步骤

要让后端服务能正常调用带授权的IS4 API,得配置IS4的本地API认证,并确保令牌包含正确的权限范围:

1. 给IS4添加本地API认证支持

在IS4的启动文件(Startup/Program.cs)中添加以下配置:

// 注册本地API认证服务
services.AddLocalApiAuthentication();

// 配置IdentityServer时启用本地API支持
services.AddIdentityServer()
    // 保留你原有客户端、作用域等配置
    .AddLocalApi();

2. 修改控制器的授权特性

把IS4中UserController的默认[Authorize]替换为本地API专属的授权策略:

[ApiController]
// 使用LocalApi的授权策略替代默认Authorize
[Authorize(LocalApi.PolicyName)]
[Route("[controller]")]
public class UserController : Controller
{
    // 你的原有业务代码...
}

3. 配置客户端与前端的权限范围

  • 在IS4的客户端配置中,为后端服务challenger和前端Angular应用challenger_web添加IdentityServerApi(即LocalApi.ScopeName)这个API作用域;
  • 前端Angular的UserManagerSettings里,请求的scope需要包含该作用域:
scope: "openid profile challenger IdentityServerApi",

4. 确认后端服务的令牌有效性

你的后端服务代码已经正确设置了Bearer令牌,只需确保该令牌解析后,scope数组中包含IdentityServerApi即可。

常见问题排查

如果遇到401提示insufficient_scope:

  • 检查IS4数据库中是否已创建IdentityServerApi作用域;
  • 解析调用时使用的JWT令牌,确认scope字段包含IdentityServerApi;
  • 若令牌中无该作用域,检查前端的scope配置是否正确添加,或IS4客户端是否已授权该作用域。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 14:15:49