Steem/SteemIt für die Authentifizierung auf externen Domains nutzen

in #deutsch8 years ago


Hallo SteemIt,

als PHP- und Internet-Entwickler schwirren mir ein paar Projektideen durch den Kopf. Für 2 habe ich schon einmal die Domains gekauft. Mal abgesehen davon das ich nun schauen muß welchen Code ich clientseitig und serverseitig auslagere (das Thema alleine würde ja schon ausreichen für eine eigene Story) ist eine andere Problemstellung aufgetaucht.

Wie fast alle Internetnutzer mag auch ich es nicht, wenn man ständig Nutzernamen, eMail und Passwort als Minimum überall angeben muss. SteemIt an sich entkoppelt ja durch die Entlohnung mit Votes die krampfhafte Nutzerbindung durch Newsletter und dergleichen. Bleibt damit noch die reine Authentifizierung des Steemians. Ich denke für zukünftige Projekte wird dies sehr wichtig. In Zukunft, schätze ich, wird es weniger Blockchain-Info-Projekte geben und mehr Projekte die einen Mehrwert liefern. Zumindestens einen Mehrwert, der eine Steemian-Authentifizierung erfordert.

Ich werde mich bei meinen eigenen Projekten darauf konzentrieren so wenig wie möglich Nutzerverwaltung zu implementieren. Leider hat Steem ja keine richtige Auth-API und deshalb habe ich mir folgenden Workaround:) einfallen lassen.

Ich nutze dabei die REST-API von SteemJS.
https://steemit.com/steemjs/@fabien/steem-api-now-released

Der Workaround:

  1. Ein Steemian kommt auf die Internetseite des Projektes und meldet sich mit seinem Steem-Nutzernamen an und einem frei gewählten Passwort oder einem Passwort nach Keygeneration-Standards die üblich sind in der Kryptoszene.
  2. Damit kann der Steemian sich aber noch nicht einloggen, sondern er erhält gleichzeitig einen Public-Token.
  3. Um seinen Account freizuschalten muß der Steemian noch eine geringe Summe STEEM an den Steem-Nutzernamen des Projekteerstellers schicken, mit dem Public-Token im Memo-Feld.
  4. Dann wird einfach die Transaktion ausgelesen. Steem-Nutzernamen und der Public-Token im Memo-Feld ausgelesen und dann der Minimal-Account mit dem gewählten Passwort freigeschaltet.

Das ist bisher der Workaround an dem ich gerade per PHP entwickle. Gerne würde ich komplett auf einen Datenbank Eintrag, außer der Session natürlich, verzichten und die Authentifizierung komplett an Steem abgeben. Aber momentan finde ich das einen guten Kompromiss.

Die Authentifizierung komplett frei von STEEM per Story-Eintrag zu verwirklichen wäre natürlich auch möglich, aber das würde ich eher als zumüllen eines Tags oder dergleichen sehen.

Vielleicht habe ich die REST-API von SteemJS aber auch überschätzt, momentan läuft die NodeJS-Package-Doc-Konvertierung zu REST-API aber ganz gut  und es werden anscheinend alle Funktionen aus dem NodeJS-Package unterstützt.

Wenn ich was Praktikables entwickelt habe, werde ich das unter #auth-api oder als Kommentar posten.

Falls Ihr andere Methoden kennt wie ein Steemian nach außen pushen kann oder wie man eine Auth-API besser realisieren könnte, wäre ich euch dankbar.

Falls Interesse an einer vollständigen deutschen REST-API Dokumentation besteht einfach in die Kommentare damit.

Ich fühle mich schon wie ein deutscher Youtuber. Voten, voten, voten und kommentieren, kommentieren, kommentieren nicht vergessen. Lach.

Bye
DasKao

Sort:  

Hi thekao,

spannende Idee, die Du da verfolgst! Ich bin gespannt, was da rauskommt ;-)
Ich schlage mich derzeit auch mit der REST API rum, was die Dokumentation und das Error-Reporting angeht, kann ich Dir leider nur voll und ganz zustimmten. Aber @fabien hat mit seiner Arbeit ja schonmal generell eine gute Grundlage gelegt...
Die meisten Funktionen kann man durch Ausprobieren recht gut nachvollziehen, mittlerweile gibt es auch die ein oder andere Quelle, wo Funktionsaufrufe als Beispiel vorliegen...

Vieles ist beispielsweise hier sehr gut dokumentiert:
https://steemit.com/steemjs/@joomla-tips/steemit-rest-api-documentation-part-1

Eventuell ist hier noch eine Fortsetzung geplant...

Da Du geschrieben hattest, man solle ich melden, falls Bedarf an einer deutschen REST-API Dokumentation besteht habe ich die Hoffnung, dass Du eventuell bei der Funktionsentschlüsselung schon ein wenig weiter bist als ich...

Eine deutschsprachige Dokumentation bräuchte ich daher nicht, aber eventuell hast Du ein Beispiel für diverse Funktionen. Mich interessieren hier besonders die getDiscussionsBy*-Funktionen, die leider nirgendwo erwähnt werden... Ebenso wäre ich Dir sehr dankbar, wenn Du vielleicht einen Tip hättest, was die Authority / Validation Funktionen angeht...

Gruß
Doc

Hi,
oh ein Rest-API Leidensgenosse:), nein nein hast Recht die Funktionalität bekommt man nur mit einem eigenen Server und viel Installationsaufwand, wenn man es 100% ownSolutionmäßig haben möchte.

Also ich denke Du meinst die "query"-Variable in der Funktion. Yoah auf den ersten Blick ohne Aussage.

var steem = require("steem");
steem.api.getDiscussionsByTrending('new', function(err, response){
console.log(err, response);
});

ergibt zum Beispiel als Node.JS-Snippet:
"Invalid cast from type '${type}' to Object"
Diese Fehlermeldung ist keine Fehlermeldung von SteemJS sondern wird durchgeschleift vom SteemNode-Server.
Ich probiere mal kurz rum, habe aber heute wenig Zeit, werde mich morgen wieder intensiver darum kümmern. Dein Bedarf an einer deutschen Übersetzung habe ich registriert:).

Kurzer Tipp, falls man kein Node.JS installieren möchte:
https://tonicdev.com/npm/steem

Hi,
ja an einem eigenen Server führt - leider - kein Weg vorbei. Mach Dir keinen Stress... Wenn es nicht heute oder morgen klappt, dann ist es auch nicht schlimm. Ich hab im Moment noch andere Baustellen ;-) Aber Du hast es richtig erkannt, die query-Variable ist das Problem...
Trotzdem vielen Dank für Deine schnelle Antwort und Deine Mühe, wünsch Dir viel Erfolg für Dein Projekt!

Gruß
Doc

Loading...

Interesante moglichkeit Steemit zu propagandiren.

Hi,

ja Steem als Authentifizierungsmöglichkeit nutzen zu können, wäre bestimmt ein nettes Features. Nicht nur für Steem-Projekte, sondern auch um Steem und SteemIt mehr in andere Projekte einbinden zu können. Momentan ist Steem extern mehr oder wenigger auf Statistiken oder Links zur SteemIt-Seite eingeschränkt. Mit ner Auth-API könnte Steem mehr auswirken auf andere externe Sachen im Web als es momentan andersherum ist.
Aber hey zum Start von Bitcoin gab es auch nur eine einzige häßliche Wallet und an Blockchain-Services hat auch niemand großartig gedacht.

Du meinst also eine 2-Way Registrierung per Steem ID und Überweisung?

Da ich auch in PHP Programmiere seit langem, schwirrt mir die Idee im Kopf eine Faucet Webseite für Steem zu coden aber ich muss erstmal meine anderen beiden Projekte abschliessen (Faucet Webseite für Bitcoin und Ethereum) bzw. fertigstellen bevor ich was neues anfange!

Hi,
so in etwa :). So könnte man das Problem der fehlenden Auth-API umgehen. Mit Hilfe der Überweisung und dem Public-Token kann man realtiv einfach eine Überprüfung durchführen. SteemID und Public-Token im Memo-Feld. ich weiß gerade nicht wie der minimalste Betrag sein könnte. Genial wäre eine Menge an STEEMS die nicht mal einen US-Cent wert wären. Weiß nur nicht ob so kleine STEEM-Beträge überweisbar sind, müßte aber, oder?
So wie es aussieht soll ja bald das Message-System kommen, dann würde dies natürlich durch eine Freischaltungsmessage ersetzt werden.

Bei der Idee des Faucets kommt mir ganz spontan in den Kopf, die Auszahlung an die erste Story zu binden, die man schreibt auf SteemIt. Da ist dann aber Story und SteemID mieinander verknüpft, also realtiv einfach zu fetchen und zu validieren.

Dir aber erst einmal ein gutes Gelingen bei Deinen beiden anderen Projekten.

Eine andere Möglichkeit, die aber natürlich die Möglichkeiten des einfachen Web-Developments überstiege, bestünde darin, auf den User-Rechnern einen Lightweight-Steem-Client laufen zu lassen (möglicherweise als direkte Browsererweiterung?) und die Webanwendung dann damit kommunizieren zu lassen.

Hi,

ja dies hat der Bitcoin-Client seit seinen ersten Kindertagen als XMLRPC integriert. Anscheinend ist die Entwicklung von SteemJS jetzt schon soweit das man voten kann. Im Prinzip könnte man jetzt langsam mit Electron oder nw.js geniale DesktopApps entwicklen, aber ich glaube SteemIt-Community hat sich schon zu sehr auf WebApps eingeschossen. Durch SteemIt hat man halt eine kleine Entkopplung von Steem und managed Alles per SteemIt.

Aber die Idee an sich ist doch überlegenswert, wenn man erst einmal die Akzeptanz bei Seite legt. Die AusweisApp2 könnte da ein gutes Beispiel sein. Ansatt aber auf den lokalen Server weiterzuleiten, könnte man einfach die lokale Schnittstelle zugreifen. Ist natürlich sehr aufwendig, aber die Grundlagen werden gerade von SteemJS geschaffen und die Einbindung als Module in Electron oder nw.js ja einigermaßen unkompliziert.

Aber für die Annahme das eine SteemID im Laufe der Zeit immer wertvoller wird und sie dadurch eine immer festere Bindung zu seinem realen Charakter eingeht, könnten solche Projekte gut und richtig für die Zukunft sein.

Achja bei Stichwörtern wie Lightweight muss Electron und nw.js glaube ich stark passen. Das ewig leidige Thema einer plattformübergreifenden GUI:).

Ich hatte das lightweight jetzt (etwas inakkurat, ich weiß) ohnehin eher im Sinne eines Steem-Clients ohne den ganzen Blockchain-Overhead gedacht.

(Aber ich nehme mal an, SteemJS stellt genau so etwas zur Verfügung?)

Hi,
achso Alles klar,lach. Ohne sich die crazy big blockchain runterzuladen,lach.

Per SteemJS kann man sich entweder einen NodeJS-Server der per websocket dann auf einen Node-Server connected installieren, oder man nutzt die Rest-API vom Anbieter. Als PHPler muss man sich einen Node.JS freundlichen Webprovider suchen, oder die Rest-API nutzen die es gibt. Man kann auch nur die JavaScript-Lib clientseitig nutzen, das wäre dann aber eher was für HTML-App download Geschichten wegen der Sicherheit.

Puh ja das ist momentan die einzigste Möglichkeit um remote auf die Blockchain zuzugreifen. Pure Rest-API ist etwas pure:).

Hi,

nur mal ne kurze Frage. Hat jemand schon tiefere Erfahrungen mit der Rest-API von SteemJS. Error-Reporting gleich null:).

Ich muss momentan das ganze auf Node.JS testen um mich per Fehlermeldungen an die genauen Get-Paramater ranzutasten.

JavaScript-Prototyping-Documentation halt, aber ich möchte mich jetzt nicht beschweren, denn ich bekomme so langsam die JSON-Outputs die ich brauche.

Weiß jemand wie ich reine Steem-Transactionen paßend zu einem AccountNamen auslesen kann?

https://api.steemjs.com/getAccountHistory?account=thekao&from=100&limit=100

Ist dies der Request für alle Transaktionen, ist das bei Steem wurst ob Post, Vote oder Überweisung? Wahrscheinlich ja oder, da ja Post auch Blockchain-Transactions sind, genauso wie Alles andere.

Auch das From größer als Limit sein muss laut console-error. Komisch ich dachte das wäre select * from id limit, mal so kurz und falsch in sql transkribiert:).

Wenn das echt so ist, dann Prost Mahlzeit erst einmal weil mir ein Like fehlt um die Abfrage zu konkretisieren. Zum Beispiel ein Like "PublicId from thekao newest App:)). Puh da darf ich dann zu den Tagen der FileDB-Logik zurückgehen.

Aber ich wollte mich ja nicht beschweren. Die Rest-API ist wirklich einigermaßen schnell und naja Error-Reporting und Dokumentation wird echt überschätzt:).

Hi,
ganz kurz noch vor dem schlafen gehen:). Ja ganz klar ich habe noch keine Transaktionen die ich auf das Feld ["memo"] untersuchen lassen hätten können um zu versuchen hinter die Logik zu steigen. Nun mußte der gute @fabio mal herhalten:

https://api.steemjs.com/getAccountHistory?account=fabio&from=8386&limit=0

Alles soweit Supi, das from scheint eine interne unique-id der blockchain-db zu sein die mit der steemid verlinkt ist. So wie es aussieht muss ich wohl mit Mondnummer arbeiten und dann diese id beim letzen datensatz auslesen, dann weiß ich denke ich wieviele transaktions-ids es in diesem datensatz gibt und dann mich dann runterarbeiten zu der transaktion die ein memo enthält mit meiner publicid oder nach meinem username oder so.

So wäre diese Hürde geschafft. So wie ich das sehe dürfte damit meine Art er Auth-API langsam Gestalt annehmen. Beim durchsuchen der zurückgebenen arrays inklusive seiner objekte kommen mir bestimmt noch ein paar andere Ideen. Aber das wahrscheinlich eher morgen:).