使用 Net Core 2 进行 JWT 远程身份验证时出错

Posted

技术标签:

【中文标题】使用 Net Core 2 进行 JWT 远程身份验证时出错【英文标题】:Error in JWT Remote Authentication using NetCore 2 【发布时间】:2018-06-03 09:53:16 【问题描述】:

我目前有两个不同的项目,一个是 MainAPI,它将公开我的 Web 客户端的功能,另一个是 AuthAPI,它处理所有的身份验证请求,全部使用 netcore 2 构建。

如果我直接调用 AuthAPI,它会根据需要处理请求。

当我尝试让 AuthAPI 对 MainAPI 请求进行身份验证时,它失败了,尽管我可以看到进出 AuthAPI 的请求。

这是我在 MainAPI Startup.cs 中的服务身份验证配置:

services.AddAuthentication(option =>
                option.DefaultAuthenticateScheme = "Bearer")
                .AddJwtBearer(options =>
                
                    options.MetadataAddress = "http://localhost:5019/auth/api/info";
                    options.Authority = "http://localhost:5019";
                    options.Audience = AUDIENCE;
                    options.RequireHttpsMetadata = false;
                    options.SaveToken = true;

                    options.BackchannelHttpHandler = new BackChannelHttpHandler();

                    options.IncludeErrorDetails = true;

                );

这里是 BackChannelHttpHandler 类:

public class BackChannelHttpHandler : HttpMessageHandler
    
        protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        

           HttpClient client = new HttpClient(new HttpClientHandler(), disposeHandler: false);          
            client.DefaultRequestHeaders.Add("Accept", "application/json");
            var res = await client.GetAsync(request.RequestUri);
            return res;
        
    

我调用的控制器作为 Authorize 注释如下:

[Authorize(AuthenticationSchemes = "Bearer")]

至于 AuthAPI,我在 Startup.cs 中配置了 Cors:

    services.AddCors(options =>
    
        options.AddPolicy("CorsConfig",
                        builder => builder
                           .AllowAnyOrigin()
                           .AllowAnyHeader()
                           .AllowAnyMethod()
                           .AllowCredentials()
                           .Build());
);

在 AuthAPI 控制器中,我还有 [EnableCors("CorsConfig")] 注释。

我可以调用 AuthAPI 控制器,它返回一个 HTTP-200,但在我的 MainAPI 中,授权过程中的某些内容被调用取消授权,我对 MainAPI 控制器的调用永远不会被执行。

我的问题是,我在 MainAPI 身份验证过程中做错了什么,它自己对令牌进行身份验证,并使请求无效。

【问题讨论】:

您是否从 MainAPI 服务器调用 AuthAPI?通话看起来如何? 【参考方案1】:

注意这个参数options.Audience; 它应该有可用的端点。

或者您可以在应用程序之间共享密钥以提高工作效率。每个端点都可以从 token 中读取 payload,但只有 auth-server 可以生成 token。

【讨论】:

据我所知,Audience 可以是任何字符串。我成功使用“用户”,包括 CORS 调用。

以上是关于使用 Net Core 2 进行 JWT 远程身份验证时出错的主要内容,如果未能解决你的问题,请参考以下文章

.NET Core 2.0 和 EF 下是不是需要使用 IdentityDbContext 进行 JWT 身份验证?

ASP.NET Core API 使用 JWT 不记名令牌进行身份验证

使用 .NET Core 3.0 进行 JWT 身份验证和 Swagger

同时对 Asp.Net core 2.0 MVC 应用程序 (cookie) 和 REST API (JWT) 进行身份验证

.net core 2.2 应用程序的 JWT 身份验证不使用身份

ASP.NET Core 2.1 Jwt 设置自定义声明