使用的WebRequest获取Cookie来自动登录到SharePoint Online中,越来越v

2019-07-29 05:38发布

我下面这个教程为SharePoint Online中远程认证,但我做的在C#。

http://allthatjs.com/2012/03/28/remote-authentication-in-sharepoint-online/

我可以从STS的SAML没有问题,但我似乎无法发送该令牌到SharePoint才能收到回饼干,以登录。下面是我的代码,请原谅任何明显的错误,我是新在这!

 //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

任何帮助和建议是极大的赞赏。

Answer 1:

从SharePoint要求您必须设置用户代理否则将返回一个403这条线;

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

是所有了。



Answer 2:

它看起来并不像你所添加的任何cookie,这可能是必需的。 如果你投你的WebRequest到HttpWebRequest的 ,你可以工作的饼干 。 见C#的WebRequest使用web浏览器的cookie 。

另外,我熟悉像一个工具提琴手以检查从您的浏览器发送请求和响应。 这可以让你看到什么被来回传送,让你可以尝试复制/仿效C#中的请求。



文章来源: Using WebRequest to obtain cookies to automatically log into Sharepoint Online, getting variour errors