c# - 使用restsharp调用具有双重身份验证的api
问题描述
我是 restsharp 的新手,对 c# 有点陌生我正在尝试使用 restsharp 来访问 api。
我可以使用powershell。
$ClientCredsPlainText = $ClientID + ":" + $ClientSecret
$ClientCredsBase64 = [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($ClientCredsPlainText))
$AuthHeader = @{"Content-Type" = 'application/x-www-form-urlencoded'
"accept" = 'application/json'
"authorization" = "Basic $ClientCredsBase64" }
$AuthAPI = @{"endpoint" = 'https://foo.bar.com/api/'
"url" = '/now/table/cmdb_ci_server?u_owner_group=' }
$AuthBody = @{"grant_type" = 'password'
"username" = $SessionUser
"password" = $SessionPassword }
$finalresult=@()
$mdsownergroup=@('foo','bar','foofoo','barbar')
foreach ($item in $mdsownergroup) {
$cmdburi = $AuthAPI.endpoint + $AuthAPI.url + $item
$cmdbrequest = Invoke-RestMethod -Method GET -Uri $cmdburi -Headers $AuthHeader -Body $AuthBody
$finalresult+=$cmdbrequest.result
}
$cmdbrequest.result
我正在用restsharp在c#中尝试同样的事情,邮递员建议以下应该有效。
var client = new RestClient("https://foo.bar.com/api/");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader("X-IBM-Client-Id", "xxxxxx");
request.AddHeader("Authorization", "[{\"key\":\"\",\"value\":\"xxxxxx",\"description\":\"\",\"type\":\"text\",\"enabled\":true}]");
request.AddHeader("Authorization", "Basic xxxx");
request.AddHeader("Cookie", "JSESSIONID=xxxxx glide_user_route=glide.xxxx glide_session_store=xxxx; BIGipServerpool_foo=209737994.35390.0000");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
使用这个我收到:
System.Net.WebException: The underlying connection was closed: An unexpected error occurred on a send. ---> System.IO.IOException: Authentication failed because the remote party has closed the transport stream.
解决方案
实际上,在与另一个开发人员审查后,我发现我需要使用基本身份验证并删除用户名和密码。通过传递客户端 ID 和密码以及用户名和密码,我过于复杂了。
推荐阅读
- mysql - 如何从 SQL Server 生成 XML 日志文件
- python - pip 包在 OSX 中创建可执行文件,但在 Ubuntu 中没有
- python - 根据条件加入有或没有最后一个元素的列表的pythonic方法
- java - 设置kafka主题过滤器
- html - 如何使用 li 和 ul 标签从 Selenium 的下拉列表中选择值?
- signal-processing - WebAudio API / javascript中低频信号的快速傅立叶变换
- spring - Spring Security @PreAuthorize 在将验证器 bean 添加到 WebDataBinder 时将其设置为 null
- java - IntelliJ 调试器不会在 Maven 项目的断点处暂停
- css - 如何在 CSS Grid 中隐藏内容?
- multithreading - 在 Google Cloud 上订阅不足时减少执行时间