HttpClient取回403错误Xamarin表单

问题描述

我有一个正在处理的项目,要求在进行HTTP Rest调用进行相互身份验证时发送证书。

这是Xamarin表单项目,我主要关心的是使它在Android方面起作用,并且如果可能的话,在PCL中包含代码。

每当我通过HttpClient发送请求时,我总是会返回403错误。下面的代码显示了如何从项目中的嵌入式资源获取PFX。

出于安全原因,我从程序集和流中删除了命名。

            // Need to properly find the assembly given a class that is present in the assembly.
            var assembly  = typeof(resourcehere).GetTypeInfo().Assembly;
            Stream stream = assembly.GetManifestResourceStream("assbemlypath.pfx");

            // Read in the data from the embedded cert file.
            byte[] certData = null;

            using (var memoryStream = new MemoryStream())
            {
                stream.CopyTo(memoryStream);
                certData = memoryStream.ToArray();
            }


            X509Certificate2Collection cert = new X509Certificate2Collection();
            cert.Import(certData,password,X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet);

执行完此操作后,我可以看到证书收集很好。我将此代码放在返回此证书集合的方法中,称为GetCertificate(),该方法在下面使用。

然后在此调用中使用它:

                var handler = new HttpClientHandler();
                handler.ClientCertificateOptions = ClientCertificateOption.Manual;
                handler.ClientCertificates.AddRange(GetCertificate());

                // Construct client with handler.
                var client = new HttpClient(handler);

                // Make request.
                var result = client.GetAsync("myurlhere").GetAwaiter().GetResult();
                var responsebody = result.Content.ReadAsStringAsync().GetAwaiter().GetResult();

通过此方法进行调试时,我总是看到处理程序具有我的证书,但调用失败,并返回403。

经过一些测试,我尝试使用HttpWebRequest代替它,并且可以正常工作。该代码使用获取证书的相同方法,但是调用是这样进行的:

                X509Certificate2Collection certificate = GetCertificate();
                var httpRequest = (HttpWebRequest)WebRequest.Create("myurlhere");
                httpRequest.ClientCertificates = certificate;
                HttpWebResponse response = (HttpWebResponse)httpRequest.GetResponse();

当我在上面执行时,我得到200,并得到了期望的响应。

有人知道什么可能导致两者之间的差异吗?

我已经待了几天,对此一无所知。

预先感谢

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...