Challenge-Response mit Android und QR

lawila

Gesperrter Benutzer
eigentlich gehört das thema eher in den mobile-bereich, zum anderen ist es aber auch eine eher allgemein frage nach eurer meinung zu dieser idee

mein vorhaben :

ich möchte über einen webservice QR-codes über den browser liefern (das sollte soweit echt kein problem sein) die dann mit einem handy gescannt (ich denke das dürfte das eigentliche problem werden) und über eine zweite verbindung zum server bestätigt werden sollen


etwas konkreter

will sich ein user einloggen läuft das ganze wie folt ab

1) user loggt sich auf login-seite mit nick und pw ein
2) server erkennt login-versuch und gibt hinweis auf nutzung der app
3) server wartet auf zweite verbindung über handy-app
4) user muss nun app starten und sich dort ebenfalls mit nick und pw anmelden
5) server erkennt zweite verbindung und liefert darauf an den browser ein QR-code
6) user muss nun mit handy in einer bestimmten zeitspanne den QR-code scannen
7) app überträgt challenge-response-daten zum server
8) server gleicht daten ab > wenn korrekt wird user im browser eingeloggt

damit das ganze nun die handy-app "erzwingt" erzeugt die app auf dem handy eine ID die bei der zweiten verbindung dem server mitgeteilt wird
der server nutzt diese ID dann als "schlüssel" um die nutzdaten im QR damit zu sichern so das die korrekten daten nur mit der zufälligen ID gelesen werden können die im speicher der app hängt


das ganze soll erstmal auf basis android laufen, kann aber später dann sicher recht einfach auch andere mobile-os ausgeweitet werden


meine fragen sind nun folgen :

1) welche lib würdet ihr für das lesen von QR unter android empfehlen ?
ich meine damit keine fertigen apps die man quasi als sub-prozess läd sondern schon richtig selbst alles macht, also vom laden der kamera über das auslösen und "knipsen" über das einlesen des gemachten bildes und scannen nach einem validaten QR

2) was haltet ihr von der idee an sich ?
es ist eher weniger auf den punkt sicherheit an sich gelegt als viel mehr auf die tatsache "wer sich einloggen will muss schon meine app nutzen"
klar gibt es auch QR-scanner für den desktop-gebrauch, daher auch entsprechend die sicherung durch die ID der app
 

dzim

Top Contributor
1) zxing https://github.com/zxing/zxing oder davon geforkte Projekte (ich habe mal irgend etwas gelesen, dass man es als SurfaceView einbetten kann, es aber noch nie selbst probiert! Also: Kann dir keine weitere Hilfe als das bieten.)

2) Interessant, aber auch herausfordernd! :) Wie willst du das auf Browserseite lösen, dass er mitbekommt, wenn der User sich eingeloggt hat? WebSockets? Ich finde die Variante mit der App aber insofern gut, das ja mittlerweile eh fast jeder ein solches Phone hat...
 

lawila

Gesperrter Benutzer
zu 2)
lässt sich mit AJAX und einem long-poll-request lösen

alternativ : der browser wäre erstmal nur als "test-objekt" beteiligt, später soll es eine eigene java-desktop-anwendung als client werden ... und da kann ich ja dann vom server aus eh a-sync steuern
 

dzim

Top Contributor
Tipp von mir: Bleib bei einer vernünftigen Browser-Anwendung. Wir haben ein Applet und bei jeder Java-Umstellung geht das Gejammer der Kunden lost. Ausserdem versaut das blöde JavaPlugin für den Browser (dessen API auch bald nicht mehr von z.B. Chrome unterstützt wird - betrifft aber eigentlich auch Flash und Silverlight) den Ruf von Java allgemein... Echt schade!

Wenn es aber doch eine Desktop-UI werden soll: Nimm bitte JavaFX, das ist wenigsten modern und es lassen sich auch einfach optisch schöne UIs erstellen (zum Teil einfach dank der API, zum Teil dank der deklarativen UI, aber auch dank CSS).

Und wenn du im Web bleiben möchtest, aber dennoch Java für die UI nehmen willst, versuch dich mal an Eclipse RAP - die Dokumentation ist zwar eher bescheiden (scheint ein generelles Problem innerhalb der Eclipse Foundation zu sein), aber das Ergebnis ist brauchbar. Und dank SWT kann man die Web-UI mit vernünftigen Layouts bauen und muss sich nicht mit dem bescheuerten - und aus Sicht der deklarativen UIs hoffnungslos veralteten - und umständlichen Layout-Problematik herumschlagen. Und für jeden kleinen noch so nichtigen Quatsch zu JavaScript/CSS greifen...

Aber das sind nur meine Ideen dazu!
 

lawila

Gesperrter Benutzer
ich danke dir auf jeden fall schon mal für deine doch ausführliche antwort ... und möchte gerne drauf eingehen

stichwort applet : nein danke, damit habe ich aufgehört rumzuspielen nach dem ich damals gemerkt habe das java über die reine applet-spielerei zu großen desktop-anwendungen hin gewachsen ist und das man wenn überhaupt eher in richtung WebStart geht

zu FX : ich muss gestehen, ja, FX ist seit Java7 nun mitlerweile fester bestandteil (glaube mit update 10 oder 15 oder so wurde es richtig integriert, vorher war im installer immer noch eine eigenständige FX-setup enthalten was dann auf einem 64bit system für insgesamt 6 setups gesorgt hat (jdk, jre, fx ... jeweils für 64- und 32-bit)) aber ich habe mich noch nicht mit befasst sondern bin, da ich eigentlich eher der bin der die logik unter der haube und nicht die GUI zusammen baut, noch auf swing "hängen geblieben"

ich hab mir FX mal soweit angesehen, und ja, deine punkte sind defintiv nachvollziehbar, ich persönlich empfinde es aber eher so als art "nachgeahmten möchtegern-browser" und bin auch sonst nicht wirklich von der idee überzeugt eine aufwändige VM laufen zu lassen die dann noch (teilweise fehlerhaft) aus HTML und CSS eine aufwändige GUI zusammengeneriert
dann kann ich auch gleich alles in HTML5 für einen modernen browser machen und kann mir die client-anwedung schenken

naja, jedem das seine, vielleicht bin ich auch einfach nur zusehr in swing festgefahren und mir fehlt es an weitsicht mich mit FX anzufreunden


zum letzten punkt : es ist eigentlich keine "web-anwedung" oder "einfach login-sicherung" geplant sondern eine vollständige desktop-anwendung welche jedoch über nutzer-authorisation sowie netzwerk-I/O arbeitet
hier will ich halt wie gesagt die anmeldung soweit "beschränken" das die app an sich die dann "notwendig" wird um sich überhaupt anmelden zu können nur einem bestimmten personenkreis veräußert wird
man könnte so z.b. mit kleinen modifikationen administratoren multi-zugriffe ermöglichen und einfachen "anwendern" dann nur ein "normales login" bieten, so das dann zwar die grundfunktionen nutzbar sind, für administrative ändergunen jedoch nur berechtigtes personal zugelassen wird


das wäre jetzt nur eine grobe vorstellung von dem wie weit man es treiben könnte ... daher war ja auch eher die allgemeine frage was ihr so von der grund-idee eines solchen systems haltet und was für ideen ihr habt
für deine hinweise bezüglich der web-programmierung bin ich natürlich sehr dankbar und werde diese anregungen mit in das projekt einfließen lassen
 

dzim

Top Contributor
Ich glaube, du bist einen Irrglauben aufgelaufen: JavaFX ist nicht mehr die bescheuerte Skriptsprache von damals. Es ist ordentliches Java. Mit einer soliden API und ein *mehr* als würdiger Nachfolger von Swing.

Hast du schon mal Android programmiert? Oberflächen? Wenn ja: Dann ist dir die Art der Entwicklung bereits vertraut. Denn: Hier läuft kein wie auch immer gearteter Browser, sondern die XMLs werden (wie bei Android) zur Laufzeit in echte Widgets umgebaut. Etwas ähnlich hat auch mal SWT mit XWT probiert (ist aber immer noch eher bedeutungslos).
Auch Qt geht mit QML einen deklarativen Ansatz. Denn ob man für die Deklaration der GUI nun ein XML-Derivat oder eine JSON-ähnliche Struktur nimmt ist am ende ja egal.
Und um den Sack zu zu machen: Apple verwendet ein verwurschteltes Pseudo-XML und Microsoft auch. Swing ist mit seinem 2ich mach lieber alles von Hand" eher ein Dinosaurier unter den GUIs.
(Und beinahe hätte ich doch tatsächlich Glade - das XML-Format von GTK+ vergessen - wir konnte mir nur das passieren! :-D )

Und wenn du unbedingt willst, dann verzichtest du in JavaFX halt auf FXML oder CSS und machst alles im Code. Ist machbar, nur eben umständlicher. Gerade das umstylen einer Anwendung macht mit diesen Technologien wirklich Spass.

Wenn du FX mal als Applet sehen willst -> Applet -> Java7 (Java8 hat in der Version noch Layout-Bugs, im Git ist es aber schon gefixt):
Internet Performance Test

Das ist sicher auch mit Swing möglich, aber weitaus - und unnötig - komplizierter.

Wie gesagt: Vergiss Swing, nimm JavaFX und wirf all dein verstaubtes Wissen darüber über Bord. :-D
 

lawila

Gesperrter Benutzer
@dzim
vielen dank für deine antwort, ich lasse mir gerne neues beibringen

wie gesagt : ich bin nicht so der große GUI-künstler und habe mir swing auch nur eher rudimentär angeeignet nach dem ich halt vom "selbstzeichnen in AWT ab bin" ... habe mich daher in diese richtung nie wirklich weiter entwickelt ... und könnte jetzt auch so aus dem stehgreif nicht mal mit swing was komplexeres zusammenlöten (das heißt : doch klar, ich bin in der DOC zuhause und kann mich durchklicken ... und google liefert auch immer sehr viel wertvolles ... sollte also wenn wirklich nötig durch aus machbar sein)

ich hab grade noch mal kurz durch mein jsp-buch vom sommer 2004 (wow ... auch schon mitlerweile 10 jahre alt) durchgeblättert ... und noch mal rekapituliert das es damals schon was ähnliches gab ... hab jetzt nur die korrekte bezeichnung nicht gefunden


ich glaube was mein größtes problem bezüglich FX ist das ich es wirklich noch als diese verstaubte scripting-kiste ansehe und nicht wirklich mit der modernen web-entwicklung in XML und CSS warm werden

sicher ... ich kann mir schon durchaus vorstellen das es mit sicherheit sinn macht als daten-quelle ein (ggf on-the-fly erzeugtes) XML zu haben und dies dann unter zu hilfename bestimmter tags und CSS halbwegs sauber zu formatieren ...

... wo es mich nur so ein bischen dran stört ist so dieser standard-punkt "extends Application" oder was da auch immer kommt

das ist für mich irgendwie so unbegreiflich analog zu einem "extends JFrame" oder ähnlichen sinnfreiem
warum sollte ich meine "anwendung" die eine logik mit einer GUI verbindet eben als eine erweiterung dieser "standard-app" ansehen ... wenn ich doch eigentlich korrekter wie in swing statt von einem JFrame zu erben einfach eine instanz eines solchen erstelle und dies nutze ?

ein extends ist doch nur dann gerechtfertigt wenn ich die eigenheiten eines objektes erweitere oder die internen abläuft grundlegend ändere ... nicht aber wenn ich es "nur nutzen will"

es hat für mich auch so ein gewisses ... weis nicht ... so dieses dumpfe untergefühl "ähnlich schlecht wie applets ... nur jetzt als vollwertige anwendung"


ich denke ich sollte was diese GUI-sachen angeht es echt an leute abgeben die damit mehr erfahrung haben und mich auf meinen bereich konzentrieren (so alles in richtung datenverarbeitung und netcode) ... das ist schon eher meine welt so zwischen den streams im verborgenen als zwischen dem bunten rumgeblinke einer GUI
 

dzim

Top Contributor
Also erstens: Du hast Recht, was die "extends Application"-Sache angeht. Zumal selbst angestaubte Frameworks wie SWT auch hervorragend ohne so etwas zurecht kommen.
Und ich finde es gut, dass du sagst, dass du die GUI-Entwicklung lieber denen überlässt, die sich damit auskennen.

Ich sag mal: Du machst das schon! viel Erfolg im Projekt!

dzim

PS: Nur als kleine Korrektur: Du bekommst kein XML als Datenquelle, dass dann á la Stylesheet gerendert wird. Man hat die GUI entweder in Code gemeisselt vorliegen, oder sie wird bei bedarf anhand eines XML generiert. Nichts ist dabei in dem Sinne "on-the-fly"... Aber das ist nur ein kleines Detail und für dich als Backendentwickler eher zweitrangig.
 

lawila

Gesperrter Benutzer
Und ich finde es gut, dass du sagst, dass du die GUI-Entwicklung lieber denen überlässt, die sich damit auskennen.
tja, das problem was sich dabei ergibt resultiert aus dem umstand : 1-mann-team
Ich sag mal: Du machst das schon! viel Erfolg im Projekt!
wie gesagt, das ganze ist eher als "theoretische machbarkeits-frage" gemeint ... aber dennoch danke für den vielen input
PS: Nur als kleine Korrektur: Du bekommst kein XML als Datenquelle, dass dann á la Stylesheet gerendert wird. Man hat die GUI entweder in Code gemeisselt vorliegen, oder sie wird bei bedarf anhand eines XML generiert. Nichts ist dabei in dem Sinne "on-the-fly"... Aber das ist nur ein kleines Detail und für dich als Backendentwickler eher zweitrangig.
dann hab ich irgendwas an irgend ner stelle komplett falsch verstanden oder quer gelesen ... kommt immer mal vor xD
 

dzim

Top Contributor
lawila hat gesagt.:
dann hab ich irgendwas an irgend ner stelle komplett falsch verstanden oder quer gelesen ... kommt immer mal vor xD
keine Sorge: kommt bei mir auch oft genug vor :-D

lawila hat gesagt.:
tja, das problem was sich dabei ergibt resultiert aus dem umstand : 1-mann-team
Na wenn es dann von Machbarkeit in Umsetzung umschwenkt, dann kannste im entsprechendem Unterforum gerne Fragen stellen. Ich werde dann sicher auf JavaFX reagieren (aber da hats noch ein paar andere, die das auch tun und mehr als genügend, die bei Swing weiterhelfen können).
 

lawila

Gesperrter Benutzer
naja, mal kurz was rudimentär in swing zusammen stecken oder wie gesagt zum testen mal n browser missbrauchen und im backend was mit php basteln ... das bekomm ich ja noch alles hin ... aber bei einer "sauberen" FX-lösung wäre ich dann wirklich auf unterstützung angewiesen
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H Mathematische challenge Allgemeine Java-Themen 11
N HTTP response code: 403 Allgemeine Java-Themen 3
D Reverse engineering Android App Allgemeine Java-Themen 4
L Aufwandsabschätzung: Android-App Aufnahmefunktion (foto) und zweiter Ebene über dem Foto (teiltransparent) Allgemeine Java-Themen 6
A Autostart android App Allgemeine Java-Themen 4
J Key Keystore Certificate Java Android Development Allgemeine Java-Themen 1
A Rechner in Android Studio Allgemeine Java-Themen 2
M Java – Warum kann ich plötzlich bei Android Studio Grafische Benutzeroberflächen mit der Maus gestalten? Allgemeine Java-Themen 5
G Liste (UsageStats) sortieren (Android) Allgemeine Java-Themen 5
S Bibliothek gleichzeitig fuers JDK und Android entwickeln Allgemeine Java-Themen 8
R Android Daten online senden Allgemeine Java-Themen 0
The Pi Android TextView richtig formatieren Allgemeine Java-Themen 1
P Java Android Code in IOS compilieren? Allgemeine Java-Themen 9
MTJ004 FTP Frage zu FTP Speicherung Java-Android-FTP Allgemeine Java-Themen 5
M Eclipse Android Kontakte XML Allgemeine Java-Themen 2
J Threads HTTP Request (Thread) dauert lange - in Android Allgemeine Java-Themen 3
T Android Webview Webpage Quellcode to string Allgemeine Java-Themen 0
A Kann String nicht vergleichen (Android) Allgemeine Java-Themen 4
B [Android] EditText-Object ist null - Nimmt nicht den Wert des enthaltenen Textfeldes ein Allgemeine Java-Themen 2
A Suche Android Programmierer Allgemeine Java-Themen 0
A Android App Projekt Allgemeine Java-Themen 0
M Android Programmieren Allgemeine Java-Themen 11
S Android: SQLite Framework einbinden Allgemeine Java-Themen 2
S Android: Verlinkung in einem TextView Allgemeine Java-Themen 3
S Android: Sprache wechseln Allgemeine Java-Themen 7
X Image Processing libary für JavaSE und Android Allgemeine Java-Themen 2
GUI-Programmer Java Forum Scrollen mit Android Allgemeine Java-Themen 9
R [Android]Wie dynamischen Button-Feld erstellen? Allgemeine Java-Themen 3
M Realisierung einer dynamischen Tabelle unter Android Allgemeine Java-Themen 3
G Java Android Development HILFE !! Allgemeine Java-Themen 2
S Android Problemchen Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben