使用NetCore 2进行JWT远程验证时出错

use*_*591 6 c# authentication jwt asp.net-core-2.0

我目前有两个不同的项目,一个是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;

                });
Run Code Online (Sandbox Code Playgroud)

这是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;
        }
    }
Run Code Online (Sandbox Code Playgroud)

我控制的控制器作为授权注释如下:

[Authorize(AuthenticationSchemes = "Bearer")]
Run Code Online (Sandbox Code Playgroud)

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

    services.AddCors(options =>
    {
        options.AddPolicy("CorsConfig",
                        builder => builder
                           .AllowAnyOrigin()
                           .AllowAnyHeader()
                           .AllowAnyMethod()
                           .AllowCredentials()
                           .Build());
});
Run Code Online (Sandbox Code Playgroud)

在AuthAPI控制器中,我还有[EnableCors("CorsConfig")]Annotation.

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

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

小智 0

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

或者您可以在应用程序之间共享密钥以提高工作效率。每个端点都可以从令牌中读取有效负载,但只有身份验证服务器可以生成令牌。