使用NetCore 2进行JWT远程身份验证时出现错误

6
我目前有两个不同的项目,一个是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吗?调用的样子是怎样的? - Ivan Zverev
1个回答

0

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

或者您可以在应用程序之间共享密钥以提高生产力。每个端点都可以从令牌中读取有效载荷,但只有授权服务器才能生成令牌。


据我所知,Audience 可以是任何字符串。我使用 "Users" 取得了成功,包括 CORS 调用。 - Ivan Zverev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接