.net core .NET核心JWT承载器跳过与identity server进行本地通信的自签名证书验证

.net core .NET核心JWT承载器跳过与identity server进行本地通信的自签名证书验证,.net-core,identityserver4,asp.net-core-webapi,.net Core,Identityserver4,Asp.net Core Webapi,我有两个API项目,一个基于.NET Framework 4.6.2(一个旧API),另一个基于.NET Core 2.0。旧API可以非常简单地禁用自签名证书验证: System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate { return true; }; 但是,此代码在.NET Core中不起作用(即使它编译得很好),并且在API尝试通信时(特别是当它尝试从identity server获取

我有两个API项目,一个基于.NET Framework 4.6.2(一个旧API),另一个基于.NET Core 2.0。旧API可以非常简单地禁用自签名证书验证:

System.Net.ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
但是,此代码在.NET Core中不起作用(即使它编译得很好),并且在API尝试通信时(特别是当它尝试从identity server获取发现文档时,它位于反向代理之后,在这种环境中,具有用于https的自签名证书)。我已经看到了,但是所有的答案都与HttpClient是如何创建的有关。我的问题是我无法控制如何创建HttpClient(令牌验证是中间件,我看不到任何方法来控制它如何创建HttpClient),所以我想知道在.NET Core中是否有一种全局方法可以跳过自签名证书验证


编辑:我的问题似乎与密切相关,但我已将自签名证书加载到容器(api正在运行)和本地计算机(容器正在运行)的受信任根目录中,并且仍然收到证书验证错误。

我应该更仔细地查看JWTBeareOptions,原来我可以设置选项。BackchannelHttpHandler,例如:
选项。BackchannelHttpHandler=new HttpClientHandler{ServerCertificateCostomValidationCallback=delegate{return true;}--现在它按预期工作

编辑:虽然可以跳过.NETCore中的证书验证,但我最终放弃了这种方法,因为它变得太麻烦,无法找到所有具有HttpClient的组件,也无法修改HttpClient以跳过证书验证。我最终采用的方法是使用创建CA,然后生成由CA签名的证书。然后,唯一的步骤是将CA证书导入容器中,它们将信任其他证书。这听起来可能有很多,但简单的rsa命令界面非常简单,而且实际上没有那么多的努力。

多亏了@riqitang

我在asp.net core 5中使用IdentityServer自签名证书时遇到了相同的问题。我经常在需要授权的地方遇到以下异常:

System.InvalidOperationException: IDX20803: Unable to obtain configuration from: 'https://localhost:5443/.well-known/openid-configuration'.
最后,在
ConfigureServices
方法中添加以下内容,解决了我的问题

services.AddAuthentication(IdentityServerAuthenticationDefaults.AuthenticationScheme)
.AddIdentityServerAuthentication(选项=>
{
...
options.JwtBackChannelHandler=新的HttpClientHandler
{
ServerCertificateCustomValidationCallback=
(消息、证书、链、sslPolicyErrors)=>true
};
});

谢谢!也许可以在标题中添加更多关于JWTBearner的内容,使其更易于搜索?我花了很长时间才找到这个问题,同时也遇到了和你一样的问题,谢谢你的反馈。编辑:看起来它已经是
”\_(ツ)_/“