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

时间:2012-05-01 16:30:34

标签: c# http sharepoint-2010 httpwebrequest

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

http://allthatjs.com/2012/03/28/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。我使用的网址是我到达http://mydomain.sharepoint.com

时重定向到的网址

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

2 个答案:

答案 0 :(得分:3)

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

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

是否花了所有。

答案 1 :(得分:1)

您似乎不会添加任何可能需要的Cookie。如果您将WebRequest投射到HttpWebRequest,则可以使用cookies。请参阅c# WebRequest using WebBrowser cookie

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