SharePointCommunity
Die deutschsprachige Community für SharePoint, Microsoft 365, Teams, Yammer und mit Azure

Sponsored by

Willkommen im Forum Archiv.
Einträge sind hier nicht mehr möglich, aber der Bestand von 12 Jahren SharePoint-Wissen ist hier recherchierbar.




REST 403 forbidden

Unbeantwortet Dieser Beitrag hat 4 Antworten

Ohne Rang
142 Beiträge
Andman erstellt 21 Jan. 2015 13:32
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo!
Ich versuche über eine externe C# Anwendung Listenitems über die REST Schnittstelle einzufügen.
Es scheitert aber immer irgendwo und es erscheint 403 forbidden.

Ich habe es mal mit diesem Beipiel Probiert (hier soll nur ein Item aktualisiert werden)

  public static string GetFormDigest()
        {
            string formDigest = null;

            string resourceUrl = "http://sp13-dev-awe/_api/contextinfo";
            HttpWebRequest wreq = HttpWebRequest.Create(resourceUrl) as HttpWebRequest;
            wreq.UseDefaultCredentials = true;
            wreq.Method = "POST";
            wreq.Accept = "application/json;odata=verbose";
            wreq.ContentLength = 0;
            wreq.ContentType = "application/json";
            string result;
            WebResponse wresp = wreq.GetResponse();

            using (StreamReader sr = new StreamReader(wresp.GetResponseStream()))
            {
                result = sr.ReadToEnd();
            }

            var jss = new JavaScriptSerializer();
            var val = jss.Deserialize<Dictionary<string, object>>(result);
            var d = val["d"] as Dictionary<string, object>;
            var wi = d["GetContextWebInformation"] as Dictionary<string, object>;
            formDigest = wi["FormDigestValue"].ToString();

            return formDigest; //Digest auslesen funktioniert

        }

        public static void UpdateListItem()
        {
            string result = string.Empty;
            Uri uri = new Uri("http://sp13-dev-awe/_api/web/lists/getbytitle('Kontakte')/items(1)");
            HttpWebRequest wreq = (HttpWebRequest)WebRequest.Create(uri);
            wreq.Credentials = CredentialCache.DefaultNetworkCredentials;

            wreq.Method = "POST";
            wreq.Accept = "application/json; odata=verbose";
            wreq.ContentType = "application/json; odata=verbose";
            wreq.Headers.Add("X-HTTP-Method", "MERGE");
            wreq.Headers.Add("IF-MATCH", "*");
            wreq.Headers.Add("X-RequestDigest", GetFormDigest());

            string stringData = "{'__metadata': { 'type': 'SP.Data.KontakteListItem' }, 'Title': 'whatever'}";
            wreq.ContentLength = stringData.Length;
            StreamWriter writer = new StreamWriter(wreq.GetRequestStream());
            writer.Write(stringData);
            writer.Flush();

            WebResponse wresp = wreq.GetResponse(); <-- Hier wirft der Debugger die 403
            using (StreamReader sr = new StreamReader(wresp.GetResponseStream()))
            {
                result = sr.ReadToEnd();
            }

        }
    }

Komm grad nicht weiter. Muss ich irgendwo noch eine Änderung am SharePoint vornehmen??
Im IIS steht die Digestauthenifizierung auf deaktiviert, macht aber keinen Unterschied, wenn ich sie aktiviere.

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 21 Jan. 2015 13:52
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Keine Ahnung, wo das eigentliche Problem liegt, aber warum verwendest Du nicht einfach das Client Object Model? Das ist deutlich einfacher und nimmt Dir auch die Authentifizierung ab.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
142 Beiträge
Andman Als Antwort am 21 Jan. 2015 13:58
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Gute Frage. Ein Kollege entwickelt ein Java Tool, mit dem er SQL Listen, Exel etc in SharePoint Listen übertragen will. Dieses unterstützt wohl nur Webschnittstellen. Was weiß ich. Ich soll nun schauen, warum die Authenifizierung nicht klappt.

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 21 Jan. 2015 14:03
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Andman"]Ein Kollege entwickelt ein Java Tool[/quote]

Wenn er schon mit so exotischen Techniken arbeitet, dann soll er sich doch auch selbst drum kümmern ;-)

Aber im Ernst: natürlich hat er nur die Möglichkeit REST direkt zu verwenden. Aber die Authentifizierung ist durchaus nicht ganz trivial und in Java wahrscheinlich ziemlich anders zu handhaben. Was kannst Du da mit C# beweisen?

Baue ein kleines Tool mit dem Client Object Model und Du kannst zeigen, daß es grundsätzlich geht. Das Client Object Model benutzt unter der Haube auch den REST und mit Tools wie Fiddler kann man dann ja rausfinden, was da hin- und hergeschickt wird.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
142 Beiträge
Andman Als Antwort am 21 Jan. 2015 16:05
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Da hast du recht.

Generell ist das mit der Authentifizierung so eine Sache. :)
Ich werde es mal so ansprechen.

Allerdings habe ich aber auch gerade bemerkt, das es auf unserer Poduktivumgebung funktioniert. Nur auf meinem Testserver nicht. Scheint wohl noch ein internes Problem vorzuliegen.

Danke für deine Anregungen! :)