使用有效AccessToken调用IdentityServer保护的WebAPI失败求助
问题根源
你部署在https://localhost:6001的受保护WebAPI服务,错误配置了面向前端Web应用的Cookie、OpenIdConnect认证方案,默认优先用Cookie方案校验请求,携带Bearer令牌的API请求未匹配到有效Cookie就触发OIDC登录跳转,不会触发JwtBearer逻辑校验你携带的Access Token,因此返回未认证错误。
修复步骤
1. 替换WebAPI服务的认证配置
删除WebAPI项目中原有包含AddCookie、AddOpenIdConnect的认证配置,仅保留JwtBearer相关配置即可:
using Microsoft.AspNetCore.Authentication.JwtBearer; services.AddAuthentication(options => { options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme; options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; }) .AddJwtBearer(options => { options.Authority = "https://localhost:5001"; options.Audience = "Bond"; });
2. 校验接口授权配置
确认API接口的[Authorize]特性未指定非Jwt的认证方案,也可显式指定用JwtBearer校验:
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)] [ApiController] [Route("[controller]")] public class WeatherForecastController : ControllerBase { // 你的接口逻辑 }
3. 验证权限匹配
你用相同Token在Postman可调用成功,说明Token本身的scope、受众配置均有效,完成上述配置修改后即可正常调用。
内容的提问来源于stack exchange,提问作者yogihosting
相关产品推荐
相关产品推荐

