I’m trying to access a file in a SharePoint list using System.Net.WebClient. The list has anonymous access disabled (when we turn it on, it works) and we’re using Claims-Based Authentication. I know that there are other ways of accessing a file in a SharePoint list, however this is regarding a call that I make to an Office Web Apps web service where I have to pass the URL of a file I want it to generate an image of. Both calling the OWA web service with this URL and trying to download the file directly via WebClient yield the same error.

The error is 403 forbidden, which after some googling I believe the cause is somehow related to using Claims-Based Authentication. I’ve tried a number of the suggested remedies, but so far nothing has worked. I can access the file and the web service using a browser and it works after I get an authentication challenge. If I fail the authentication challenge intentionally I get a 401 error (not a 403), so I don’t believe there’s anything wrong with the credentials (I’ve gone so far as to hard-code them). I’ve tried running the code with RunWithElevated Privileges, but that doesn’t help.

Here is some sample code:

    using (var webClient = new WebClient())
    {
    webClient.UseDefaultCredentials = true;
    byte[] result = webClient.DownloadData(urlOfFileInList);
    }

Any help is appreciated!

share|improve this question
    
I have exact same issue, do you solve it? – nixjojo May 3 '12 at 3:23

You might have to do the claims login with WebClient, see if you can use this as a starting point.

    using (var webClient = new WebClient()) {
        string url = "http://yoursite";
        string result = null;
        try {
            result = webClient.DownloadString(url);
        } catch (Exception ex) {
            if (ex.ToString().Contains("403")) {
                result = webClient.DownloadString(url + "/_forms/default.aspx");
                string viewstate = result.Substring(result.IndexOf("__VIEWSTATE") + 11);
                viewstate = viewstate.Substring(viewstate.IndexOf("value=\"") + 7);
                viewstate = viewstate.Substring(0, viewstate.IndexOf("\""));
                string eventvalidation = result.Substring(result.IndexOf("__EVENTVALIDATION") + 17);
                eventvalidation = eventvalidation.Substring(eventvalidation.IndexOf("value=\"") + 7);
                eventvalidation = eventvalidation.Substring(0, eventvalidation.IndexOf("\""));
                System.Collections.Specialized.NameValueCollection values = new System.Collections.Specialized.NameValueCollection();
                values.Add("__EVENTARGUMENT", "");
                values.Add("__EVENTTARGET", "");
                values.Add("__EVENTVALIDATION", eventvalidation);
                values.Add("__LASTFOCUS", viewstate);
                values.Add("__VIEWSTATE", "");
                values.Add("ctl00$PlaceHolderMain$signInControl$UserName", "");
                values.Add("ctl00$PlaceHolderMain$signInControl$login", "Sign In");
                values.Add("ctl00$PlaceHolderMain$signInControl$password", "");
                //byte[] data = webClient.UploadValues(url + "/_forms/default.aspx", "POST", values);
                //result = System.Text.Encoding.Default.GetString(data);
                //result = webClient.UploadString(url + "/_forms/default.aspx?__EVENTARGUMENT=&__EVENTTARGET=&__EVENTVALIDATION=" + 
                //    eventvalidation + "&__LASTFOCUS=&__VIEWSTATE=" + viewstate + 
                //    "&ctl00$PlaceHolderMain$signInControl$UserName=&ctl00$PlaceHolderMain$signInControl$login=Sign+In&ctl00$PlaceHolderMain$signInControl$password=", "");
                string location = webClient.ResponseHeaders["Location"];
                result = webClient.DownloadString(url);
            }
        }
    }
share|improve this answer
    
My solution was to get the file contents using SPFile, then adding the file to a new unprotected list, then run Office Web Apps on the new copy. After I process the files I clear them out of the unprotected list. – Brett Hovenkotter Jan 25 '11 at 1:12

You will have better luck using the SharePoint OM with WIF. An example is available here: http://www.shailen.sukul.org/2010/07/adfs-20-and-sharepoint-client-om.html

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.