Laden...

OAuth 400 Ungültige Anforderung

Erstellt von iceman11 vor 9 Jahren Letzter Beitrag vor 9 Jahren 7.131 Views
I
iceman11 Themenstarter:in
8 Beiträge seit 2014
vor 9 Jahren
OAuth 400 Ungültige Anforderung

Hallöchen,

ich programmier gerade in C# eine OAuth-Lösung für Xing. Allerdungs erhalte ich immer einen Fehler und ich weiß nicht woran das liegt. Hier der Fehler:

Fehlermeldung:
In System.Net.WebException ist eine Ausnahme vom Typ "System.dll" aufgetreten, doch wurde diese im Benutzercode nicht verarbeitet.

Zusätzliche Informationen: Der Remoteserver hat einen Fehler zurückgegeben: (400) Ungültige Anforderung.

Dazu der Passende Code:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Web;
using System.Net;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Text.RegularExpressions;
using OAuth;
namespace Social_Connect
{
    public partial class xing : Form
    {
        Manager oauth;
        public xing()
        {
            InitializeComponent();
        }

        private void xing_Load(object sender, EventArgs e)
        {
            oauth = new OAuth.Manager();
            // the URL to obtain a temporary "request token"
            var rtUrl = "https://api.xing.com/v1/request_token";
            oauth["consumer_key"] = "xxx";
            oauth["consumer_secret"] = "xxxxxx";
            oauth.AcquireRequestToken(rtUrl, "POST");
            var url = "https://api.xing.com/v1/authorize?oauth_token=" + oauth["token"];
            webBrowser1.Url = new Uri(url);
            //System.Diagnostics.Process.Start(url);
        }

        private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            string url = webBrowser1.Url.ToString();

            if (url.Contains("authorized=true"))
            {
                var divMarker = "id=\"verifier\""; // the div for twitter's oauth pin
                var index = webBrowser1.DocumentText.LastIndexOf(divMarker) + divMarker.Length;
                var pin = webBrowser1.DocumentText.Substring(index+1, 4);
                //var snip = webBrowser1.DocumentText.Substring(index);
                //var pin = Regex.Replace(snip, "(?s)[^0-9]*([0-9]+).*", "$1").Trim();
                Console.WriteLine(pin);
                //webBrowser1.Visible = false; // all done with the web UI
                oauth.AcquireAccessToken("https://api.xing.com/v1/access_token", "POST", pin);
                var appurl = "https://api.xing.com/v1/users/me";
                var authzHeader = oauth.GenerateAuthzHeader(appurl, "GET");
                var request = (HttpWebRequest)WebRequest.Create(appurl);
                request.Method = "GET";
                request.PreAuthenticate = true;
                request.AllowWriteStreamBuffering = true;
                request.Headers.Add("Authorization", authzHeader);

                using (var response = (HttpWebResponse)request.GetResponse())
                {
                    if (response.StatusCode != HttpStatusCode.OK)
                        MessageBox.Show("There's been a problem trying to tweet:" +
                                        Environment.NewLine +
                                        response.StatusDescription);
                }
            }

        }
    }
}

Der Bereich spuckt die Fehlermeldung aus:


using (var response = (HttpWebResponse)request.GetResponse())

Danke im Voraus.

MfG

iceman11

16.806 Beiträge seit 2008
vor 9 Jahren

Vergleichen Dein Request mit Hilfe von Fiddler und Du wirst sehen, was mitgesendet wird und kannst es vergleichen mit dem was mitgesendet werden soll.
So ist das nur rumraten.

I
iceman11 Themenstarter:in
8 Beiträge seit 2014
vor 9 Jahren

danke für die Antwort. Leider konnte ich da nicht herausfinden woran das liegt.
Hast du vllt eine andere Idee oder jemand anderes eine Idee?

16.806 Beiträge seit 2008
vor 9 Jahren

Wenns kein Fehler im Header gibt und nichts fehlt - wie Du sagst - dann ist es ein Fehler bei Xing.
Ich bezweifle aber, dass das stimmt, sonst würde 500 statt 400 kommen.

400 sagt aber, dass etwas fehlt oder fehlerhaft ist.

1.346 Beiträge seit 2008
vor 9 Jahren

Viele Dienste mögen es nicht, wenn kein User Agent mitgeschickt wird. Vielleicht liegts daran?

LG

I
iceman11 Themenstarter:in
8 Beiträge seit 2014
vor 9 Jahren

Nein leider klappt es auch nicht mit dem UserAgent.
Hab folgendes ausprobiert:


request.UserAgent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36";
I
iceman11 Themenstarter:in
8 Beiträge seit 2014
vor 9 Jahren

hat keiner sonst eine Idee?

5.657 Beiträge seit 2006
vor 9 Jahren

Hi iceman11,

"klappt nicht" ist keine Fehlerbeschreibung. Du bis im ersten Beitrag darauf hingeweisen worden, mit Fiddler zu schauen, was übertragen wird und was zurückkommt, und dann zu vergleichen, was dein Programm anders macht. Das würde man normalerweise so machen. Wenn du uns aber nicht sagst, was du dabei festgestellt hast, dann können wir dir wahrscheinlich auch nicht weiterhelfen.

Bitte beachte [Hinweis] Wie poste ich richtig?, besonders Punkt 4 ("Wälzt nicht eure Aufgaben auf uns ab") und 5 ("Problem genau beschreiben - inkl. genauer Fehlermeldung - und konkrete Fragen stellen"), 7 ("Nicht gleich pushen, nicht drängeln") und 8 ("Tut, worum man euch bittet").

Christian

Weeks of programming can save you hours of planning

I
iceman11 Themenstarter:in
8 Beiträge seit 2014
vor 9 Jahren

Ja da hast du recht. Sorry. Ich muss mich wohl noch an Foren gewöhnen. Ich habe es nochmal den body der Fehlermeldung als JSON ausgelesen und folgendes kam heraus:

Fehlermeldung:
{"errors":[{"field":"oauth_verifier","reason":"UNEXPECTED"}],"message":"Unknown parameters given: oauth_verifier","error_name":"UNKNOWN_PARAMETER"}

Leider komme ich da nicht weiter.

16.806 Beiträge seit 2008
vor 9 Jahren

Normalerweise bietet eine ensprechende API fertige Methoden an, sodass Du den Kruscht mit Webrequests gar nicht selbst machen musst.
Wenn man 30 Sekunden in Google investiert wird man auch ein Open-Source SDK für XING finden, damit man sich anschauen kann, wie die das machen:
https://netforxing.codeplex.com/releases/view/101708

Jedenfalls sieht das so bei Dir aus, dass er insgesamt Dein Authvorgang für ungültig erklärt.
Das mag daran liegen, dass - in der Theorie -


 oauth = new OAuth.Manager();
             // the URL to obtain a temporary "request token"
             var rtUrl = "https://api.xing.com/v1/request_token";
             oauth["consumer_key"] = "xxx";
             oauth["consumer_secret"] = "xxxxxx";
             oauth.AcquireRequestToken(rtUrl, "POST");

für den Vorgang ausreichen sollte.

Laut Doku kommt man ann an den accessToken via

var pin = "";
OAuthResponse accessToken = oauth.AcquireAccessToken("https://api.xing.com/v1/access_token", "POST", pin);

Du aber beachtest den AuthResponse überhaupt nicht.
Jede weitere Anfrage muss - laut offizieller Dokumentation - die OAuth-Header beinhalten. Kann ich jetzt bei Dir nicht wirklich sehen.


Ich rate Dir eine andere OAuth Bibliothek zu verwenden, zB DotNetOpenAuth, die oAuth 1.0 und 2.0 unterstützt; oder ein fertiges SDK.
Zu DotNetOpenAuth gibt's Millionen an Beispielen. Dadurch, dass OAuth standardisiert ist kannst Du jedes Beispiel, ob Facebook, Twitter und Co.. nutzen.

I
iceman11 Themenstarter:in
8 Beiträge seit 2014
vor 9 Jahren

Danke für deine Antwort, allerdings muss ich das verwenden.

Hab herausgefunden das der Verifier raus muss aber dann erhalte ich folgende Fehlermeldung:

Fehlermeldung:
{"message":"Invalid OAuth signature","error_name":"INVALID_OAUTH_SIGNATURE"}

Irgendwer eine Idee?

I
iceman11 Themenstarter:in
8 Beiträge seit 2014
vor 9 Jahren

Hey,

Hier eine neue Beschreibung meines Fehlers:

oAuth XING Api Fehler

Hat jemand eine Idee?