我目前有两个不同的项目,一个是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;
}
}
我控制的控制器作为授权注释如下:
[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身份验证过程中做错了什么,它自己验证令牌,并使请求无效。
答案 0 :(得分:0)
注意这个参数选项。耐心; 它应该有可用的终点。
或者您可以在应用程序之间共享密钥以提高工作效率。每个端点都可以从令牌读取有效负载,但只有auth-server才能生成令牌。