OAuth 2-Flow für Imgur im Discourse-Plugin

Hallo,

ich entwickle ein sehr spezifisches Plugin für unsere Discourse-Instanz und habe ein paar Fragen.

Irgendwann muss das Plugin eine Sammlung unserer Discourse-Themenbilder an Imgur senden. Der Teil, der diese Bilder sammelt, ist bereits erledigt.

Jetzt versuche ich, mich über den OAuth2-Flow von Imgur bei der Imgur-API zu authentifizieren. Ich habe bereits eine Admin-Oberfläche für das Plugin erstellt, über die du einen Button drücken kannst, um das Plugin in deinem Imgur-Konto zu autorisieren. Sobald sich der Benutzer anmeldet, wird eine Callback-URL (die als meine Discourse-Instanz und eine spezifische Route konfiguriert ist, die ich im Plugin erstellt habe) mit dem Zugriffstoken aufgerufen (siehe Beispiel).

http://localhost:3000/admin/plugins/plugin_name/callback#access_token=<token>&...

Meine Frage ist: Wie kann ich dieses Token zurückbekommen? Ich habe keine Ahnung, wo ich anfangen soll.

Mein Verständnis ist, dass da das Token als Hash-Parameter zurückgegeben wird, dies auf der JS-Seite geschehen muss. Ich habe versucht, einen Controller und eine Route für meine Callback-URL einzurichten, kann aber nicht herausfinden, wie man die URL (und insbesondere den Hash-Teil) von dort aus liest. (Ich habe nichts Hilfreiches in der Ember.js-Dokumentation oder auf Stackoverflow gefunden.) Ich habe versucht, verschiedene Event-Listener einzurichten, aber sie scheinen nie ausgelöst zu werden.

Meine zweite Frage ist: Wo sollte ich das Token und das Refresh-Token speichern? Kann ich es als Systemeinstellung im Plugin speichern? Ich habe von PluginStore gehört, aber dieser ist nur in Ruby zugänglich (was bedeuten würde, dass ich einen Endpunkt für den Client erstellen müsste, um diese Tokens an den Server zu senden). Ist das auch aus Sicherheitssicht unbedenklich?

Vielen Dank!

Edit: Ich hatte einen Tippfehler in meinem Routendateinamen – es fehlte ein ‘s’, deshalb wurde nichts ausgelöst…

Du wirst dies über HTTP zu localhost nicht erreichen können. Es wird empfohlen, zu benötigen HTTPS mit einem Tool wie https://ngrok.com/ zu simulieren oder deinen Entwicklungsserver im Cloud-Modus mit einer Domain im HTTPS-Modus auszuführen.

Ich dachte, ich bräuchte das auch, aber ich werde ordnungsgemäß auf meine lokale URL umgeleitet und sehe das Token in der URL.

Ja, du hast recht, der Client kann HTTP verwenden. Das Problem ist jedoch, dass es abgefangen und die Tokens ausgelesen werden können, sodass es keinen Sinn macht, überhaupt OAuth2 zu verwenden :). Ich persönlich fühle mich auch wohler, wenn ich in der Entwicklung mit dem vollständigen Endprotokoll arbeite, damit ich weiß, dass mein Code funktioniert.

Oh ja, da stimme ich absolut zu, das war bisher nur für Entwicklungszwecke. Natürlich würde ich in der Produktion HTTPS verwenden :slight_smile: