如何:C#WebClient使用相互TLS访问服务端点(类似Oauth 2.0的协议)

如何:C#WebClient使用相互TLS访问服务端点(类似Oauth 2.0的协议),c#,oauth,ssl-certificate,restsharp,C#,Oauth,Ssl Certificate,Restsharp,我需要点击一个服务来获取应用程序票证,以针对另一个服务进行身份验证。解决方案托管在端点上 我尝试在google chrome中使用POSTMAN应用程序,它成功地将AppID返回给我。当我在POSTMAN应用程序中提交(POST)请求时,它会提示输入证书。当我选择正确的证书时,调用成功 我需要在C#(在web应用程序中)中实现同样的功能 我尝试使用RestSharp.RestClient库,但不断出现以下错误: “在站点证书中找不到客户端证书” 附上代码以供参考 请。帮助使用双方TLS拨打此

我需要点击一个服务来获取应用程序票证,以针对另一个服务进行身份验证。解决方案托管在端点上

我尝试在google chrome中使用POSTMAN应用程序,它成功地将AppID返回给我。当我在POSTMAN应用程序中提交(POST)请求时,它会提示输入证书。当我选择正确的证书时,调用成功

我需要在C#(在web应用程序中)中实现同样的功能

我尝试使用RestSharp.RestClient库,但不断出现以下错误: “在站点证书中找不到客户端证书”

附上代码以供参考



请。帮助使用双方TLS拨打此电话

蒂亚,
Sam.

我不知道为什么我不能使用RestSharp完成它

但是我可以通过使用HttpWebRequest来实现它

另外,早些时候我使用了导致错误的Certificate.Pfx文件。使用Certificate.Cer文件解决了这个问题

张贴代码以供参考:

var request = (HttpWebRequest)WebRequest.Create("MyURL/oauth20_clientcredentials.srf");

var postData = "grant_type=client_credentials";
postData += "&param2=value2";
postData += "&scope=" + HttpUtility.UrlEncode("machinename");
var data = Encoding.ASCII.GetBytes(postData);

request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = data.Length;

using (var stream = request.GetRequestStream())
{
    stream.Write(data, 0, data.Length);
}

request.ClientCertificates.Add(new System.Security.Cryptography.X509Certificates.X509Certificate(@"E:\MyCertificate.cer"));

var response = (HttpWebResponse)request.GetResponse();

var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();

return appToken;
谢谢

Sam Jayander Thiagarajan

var request = (HttpWebRequest)WebRequest.Create("MyURL/oauth20_clientcredentials.srf");

var postData = "grant_type=client_credentials";
postData += "&param2=value2";
postData += "&scope=" + HttpUtility.UrlEncode("machinename");
var data = Encoding.ASCII.GetBytes(postData);

request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = data.Length;

using (var stream = request.GetRequestStream())
{
    stream.Write(data, 0, data.Length);
}

request.ClientCertificates.Add(new System.Security.Cryptography.X509Certificates.X509Certificate(@"E:\MyCertificate.cer"));

var response = (HttpWebResponse)request.GetResponse();

var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();

return appToken;