我正在尝试使用HttpClient
从AD FS获取令牌,然后登录SharePoint
站点。我已经完成了第一部分,我可以成功地将凭据发布到ADFS并在响应中获取令牌。我正在努力解决第二部分问题。 AD FS处理此问题的方法是在登录后以200(OK)回复。响应的主体具有隐藏的形式,其中包含令牌和目标URL。在浏览器中,表单是使用JavaScript自动提交的。但HttpClient
不执行JS,因此进程停止。
我的问题:是否可以将.Content.ReadAsStringAsync()
添加到另一个帖子请求中?我可以使用HTML Agility Pack来提取表单值,然后将它们作为键/值数组添加到新请求中(这就是我将我的凭据发布到ADFS的方式),但我想知道是否有更简单的方法,因为我已经在AD FS的回复中提供了表单内容。
谢谢!
更新:我最终使用HTML Agility Pack开始了这条路线。
// load into HTML Agility Pack
HtmlNode.ElementsFlags.Remove("form");
var adfsPage = new HtmlDocument();
adfsPage.LoadHtml(formContent);
HtmlNode formNode = adfsPage.DocumentNode.SelectNodes("//form")[0];
// loop through each input and add it to the key/value array
foreach (HtmlNode node in formNode.Elements("input"))
{
HtmlAttribute value = node.Attributes["value"];
HtmlAttribute name = node.Attributes["name"];
if (value != null)
{
form.Add(new KeyValuePair<string, string>(name.Value, value.Value));
}
Console.WriteLine("Key: " + name.Value);
Console.WriteLine("Value: " + value.Value);
}