IdentityServer4同服务端API携带Access Token访问返回401问题咨询
解决方案
- 删除重复的JWT认证配置
AddLocalApiAuthentication()方法已经内置了IdentityServer本地API所需的JWT认证逻辑,无需手动额外配置AddJwtBearer,直接删除以下代码段即可:
services.AddAuthentication(options => { options.DefaultAuthenticateScheme = IdentityServerAuthenticationDefaults.AuthenticationScheme; options.DefaultChallengeScheme = IdentityServerAuthenticationDefaults.AuthenticationScheme; }) .AddJwtBearer(options => { options.SaveToken = true; options.Authority = "https://localhost:5555"; options.RequireHttpsMetadata = false; options.Audience = LocalApi.ScopeName; });
- 修正接口的Authorize特性
无需手动指定认证方案,直接绑定本地API对应的策略即可,接口特性修改为:
[HttpGet] [Route("v1/info")] [Authorize(Policy = LocalApi.PolicyName)] public async Task<ActionResult> GetAccountInfo()
- 调整中间件顺序
.NET Core 2.2 + IdentityServer4的场景下,认证中间件需要放在IdentityServer中间件之前生效,修改Configure方法的顺序为:
app.UseHttpsRedirection(); app.UseAuthentication(); app.UseIdentityServer(); app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller}/{action=Index}/{id?}"); });
- 校验权限配置
确保你申请Access Token时请求的Scope包含本地API的Scope(默认值为IdentityServerApi),同时IdentityServer服务端的客户端配置中,已经给对应客户端开放了该Scope的访问权限。
内容的提问来源于stack exchange,提问作者Aiham Abu Rafaa
相关产品推荐
相关产品推荐

