Windows Phone 7 & OAuth 2.0 – Fourscore for Windows Phone ärgert sich über Foursquare API

Die Programmierung meiner ersten eigenen Windows Phone 7 App mit dem Namen Fourscore zwingt mich dazu, eine fremde API zu verwenden, welche auf OAuth 2.0 setzt. Bei OAuth ist es das erklärte Ziel, dass ein Benutzer, der einer App Zugriff auf seinen Account bei einem anderen Dienst wie bspw. Foursquare oder Twitter gewähren möchte, nicht mehr direkt in die App seine Logindaten eingeben muss. Statt dessen ist es erwünscht, dass die Apps oder Dienste, die sich an der API autorisieren wollen, an hand von ihnen zugewiesenen IDs und Schlüsseln auf den eigentlichen Dienst leiten. Dort gibt der Benutzer dann seine Logindaten ein, gestattet explizit der App den Zugriff und anschließend wird ein sogenannter Access Token erstellt, den die App erhält und abspeichern muss. Anhand dieses Tokens kann die App dann als vom Nutzer autorisiert bestimmte Dinge mit dessen Account anstellen oder eben nicht.

Wer das jetzt aufmerksam gelesen hat, wird festgestellt haben, dass dies einen gewissen Teil ganz normales Browsen darstellt. Sprich: Öffnen einer Website, lass den User da mal machen und irgendwann kriegen wir über eine Callback-URL den Token. Ja, alles schön und gut, aber was ist, wenn die App kein webbasierter Dienst ist wie bsp. Formspring oder BotPwn? Dann bedeutet der Browserzwang nämlich nur umständliches rumgesurfe und am Ende weiß die App immer noch nicht so recht, wie sie an den Access-Token kommen soll.

Foursquare erfordert zur Authentifizierung OAuth 2.0 und davon ist meine App Fourscore for Windows Phone direkt betroffen. Es gibt für Windows Phone 7 im Prinzip zwei Möglichkeiten, das Ansurfen einer URL zu erreichen. Man könnte einen sogenannten Phone-Task ausführen lassen, in diesem Fall einen WebBrowserTask. Dieser veranlasst Windows Phone 7 eine Instanz des Browsers zu öffnen und die gewünschte URL anzusurfen. Das bedeutet für die App in diesem Moment die Deaktivierung, sie wird eingeschläfert. Dass der Nutzer sich am gewünschten Dienst anmeldet und den Access Token zwischenzeitlich bekommen haben könnte, davon erfährt die App nichts. Man kann den User nicht einmal dazu auffordern, den Token zu kopieren und dann in ein Eingabefeld der App einzufügen, weil Windows Phone 7 derzeit nocht nicht über Copy&Paste verfügt. Schöne Scheiße.
Die andere Variante ist eine eigene Webbrowser-Instanz in der App zu verwenden, sozusagen als Steuerelement wie einen Button oder eine Textbox. Vorteil hier wäre, dass man sogar überwachen könnte, ob darin die Seite mit dem schließlich erzeugten Access Token zu sehen ist, könnte ihn automatisch auslesen und fertig. Nur leider… und das nervt wirklich… kann man sich mit diesem Control nicht bei Foursquare einloggen. Man bleibt einfach auf der Loginseite hängen. Gehts frustrierender?

Was bedeutet das im Endeffekt? Nun, Fourscore wird versuchen müssen, selbst eine Art Browser zu werden. Die ganzen Requests mit der OAuth-API von Foursquare müssen wir wohl selbst nachbauen. Leider funktioniert die HttpWebRequest-Klasse in Silverlight anders als im „normalen“ .NET Framework. Ob sie im Endeffekt überhaupt all das kann, was für diesen Autorisierungsprozess notwendig ist, weiß ich noch gar nicht, werde ich aber heraus finden müssen. Nutzer werden als am Ende doch wieder ihren Benutzernamen und ihr Passwort in die App eingeben. OAuth ad absurdum geführt. Da könnte man sich das mit dem Access Token auch gleich sparen.

Noch dazu ist die Foursquare App einfach ständig mal nicht erreichbar und antwortet mit total schrägen 404 Fehlermeldungen. Ich glaubte, die offizielle Foursquare-App für Windows Phone sei einfach nur kaputt. Dabei ist es die ganze API. Na mal sehen, was das noch wird…

GD Star Rating
loading...

Ähnliche Einträge:

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *


*

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>