我目前有两个不同的项目,一个是MainAPI,它将公开我的Web客户端的功能,另一个是AuthAPI,它处理所有的auth请求,所有这些都使用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;
        }
    }

我将 Controller 称为Authorize批注,如下所示:
[Authorize(AuthenticationSchemes = "Bearer")]

至于AuthAPI,我在Startup.cs中配置了Cors:
    services.AddCors(options =>
    {
        options.AddPolicy("CorsConfig",
                        builder => builder
                           .AllowAnyOrigin()
                           .AllowAnyHeader()
                           .AllowAnyMethod()
                           .AllowCredentials()
                           .Build());
});

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

我可以得到对AuthAPI Controller 的调用,它返回一个HTTP-200,但是在我的MainAPI中,授权过程中的某些内容被调用,从而取消了对它的授权,并且我对MainAPI Controller 的调用从未执行。

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

最佳答案

注意此参数选项。
它应该有可用的端点。

或者您可以在应用程序之间共享 key 以提高工作效率。每个端点都可以从 token 读取有效负载,但是只有auth-server才能生成 token 。

关于c# - 使用NetCore 2的JWT远程身份验证中的错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47912782/

10-12 05:29