使用WebRequest获取cookie以自动登录Sharepoint Online,获取各种错误

我正在按照本教程远程validationSharepoint Online,但我是在C#中进行的。

Remote authentication in SharePoint Online

我可以从STS获得SAML没有问题,但我似乎无法将此令牌发送到Sharepoint以收回Cookie以便登录。以下是我的代码,请原谅任何明显的错误,我是新来的!

//Send cookie to SPO. The token is from STS. byte[] spbyteArray = Encoding.UTF8.GetBytes(theToken); WebRequest sprequest = WebRequest.Create("https://login.microsoftonline.com/login.srf?wa=wsignin1.0&rpsnv=2&ct=1335885737&rver=6.1.6206.0&wp=MBI&wreply=https%3A%2F%2Fcamida.sharepoint.com%2F_forms%2Fdefault.aspx&lc=1033&id=500046&cbcxt=mai&wlidp=1&guest=1"); sprequest.Method = "POST"; sprequest.ContentLength = spbyteArray.Length; sprequest.ContentType = "application/x-www-form-urlencoded"; sprequest.Headers.GetType().InvokeMember("ChangeInternal", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.InvokeMethod, null, sprequest.Headers, new object[] { "Host", "mydomain.sharepoint.com" }); Stream spdataStream = sprequest.GetRequestStream(); spdataStream.Write(spbyteArray, 0, spbyteArray.Length); spdataStream.Close(); //Get response from SPO WebResponse spresponse = sprequest.GetResponse(); spdataStream = spresponse.GetResponseStream(); StreamReader spreader = new StreamReader(spdataStream); // Read the content. string spresponseFromServer = spreader.ReadToEnd(); 

如果我在教程中使用URL,则会禁止403。 我使用的URL是我到http://mydomain.sharepoint.com时重定向到的URL

非常感谢任何帮助和建议。

从SharePoint请求时,您必须设置用户代理,否则它将返回403此行;

  sprequest.UserAgent = "Mozilla/5.0 (Windows NT 6.0; rv:12.0) Gecko/20100101 Firefox/12.0"; 

这一切都花了。

它看起来不像您要添加任何cookie,这可能是必需的。 如果将WebRequest转换为HttpWebRequest ,则可以使用cookie 。 请参阅使用WebBrowser cookie的c#WebRequest 。

此外,我会熟悉像Fiddler这样的工具,以便检查您从浏览器发送的请求和响应。 这使您可以准确地查看正在发送的内容,以便您可以尝试在C#中复制/模拟请求。