2016-07-20 8 views
1

Ich bin ziemlich neu in Oauth, aber müssen lernen, wie man es in Java macht, so dass wir eine REST-Anfrage authentifizieren können. Hier ist, was ich bisher habe.Java-Bibliothek Oauth1.0a-Signatur generieren

Nach ein wenig Lesen, entschied ich mich, ScribeJava zu versuchen. Ich habe eine benutzerdefinierte API erstellt, die DefaultApi10a implementiert und auf unseren Endpunkt verweist. Ich richte den Service so ein:

final OAuth10aService service = new ServiceBuilder() 
     .apiKey("key") 
     .apiSecret("secret") 
     .build(TestApi.instance()); 

Das hat nicht funktioniert. Nach einigen Grabungen scheint es, dass ich kein selbstsigniertes Zertifikat bekomme, weil ich nicht in der Lage bin, zum entfernten Host zu gelangen. Ich habe eine Fehlermeldung erhalten, dass ein Problem beim Herstellen einer Verbindung mit dem Remote-Dienst aufgetreten ist. ScribeJava scheint keine Möglichkeit zu bieten, die Überprüfung der Verwendung eines selbstsignierten Zertifikats zu deaktivieren.

Da wir mit dem Autorisierungsheader auf der Anfrage authentifizieren möchten, wie würde ich nur den Header-Teil mit einer Java-Bibliothek generieren? Ich habe mich überall umgesehen und konnte nichts finden.

Als Referenz haben wir erfolgreich gemacht gute Oauth REST ruft Python mit einfachen etwas wie folgt aus:

headeroauth = OAuth1(Oauth1Key, Oauth1Secret, 
       signature_type='auth_header') 

myResponse = requests.get("endpoint_here", auth=headeroauth, verify=False) 

Jede Eingabe, wie etwas von der gleichen Sache mit Java zu erreichen?

Antwort

4

Es gibt viele Bibliotheken, die ich gerne zum Erstellen eines OAUTH-Logins verwenden möchte. Meiner Meinung nach ist JWT (Json Web Token) der einfachste. Sie können die Gebrauchsanweisung finden Sie hier:

https://github.com/auth0/java-jwt

Im Grunde, was Sie tun möchten, ist diese drei Schritte als Login Fluss folgen:

1) Wenn Benutzer anmelden versucht, seinen Benutzernamen überprüfen und Passwort und wenn Erfolg dann generieren ein JWT unterzeichnet mit einem KEY STORED IN YOUR BACKEND. Die Bibliothek selbst ist sehr klar, wie man ein Json Web Token-Objekt signiert.

2) das Token für den Benutzer unterzeichnet Return, dieses Token Sie Benutzer innerhalb jeder Anforderung Header für jeden Ihrer REST-Services/Endpunkte, die Sie die Authentifizierung mit dem Token

3) Was Sie zuerst tun benötigen schicken Sie erhalten von dem Benutzer ist überprüfen Sie die Signatur (Bibliothek ist auch sehr klar, wie dies zu tun). Wenn die Validierung erfolgreich ist, bedeutet dies, dass das Token vertrauenswürdig ist und Sie mit Ihrer App fortfahren können.

Die coole Sache über JWT ist, dass Sie nicht private Informationen innerhalb der Token platzieren können, die für Sie nützlich ist, so dass Sie nicht ständig in der Datenbank suchen müssen. Zum Beispiel die Benutzer-ID, die Benutzer-E-Mail, der Token-Zeitablauf selbst usw.

Offensichtlich werden diese Daten dem Benutzer innerhalb des Tokens als Basis-64-String, also wahrscheinlich Wenn er schlau genug ist, kann er es entschlüsseln und sehen, was drin ist (er wird seine userId, Benutzernamen oder was auch immer Sie haben) in das Token gelegt), aber womit er nicht umgehen kann, ist die Signatur. Wenn er also versucht, clever zu spielen und einen Wert innerhalb des Tokens zu ändern und einen neuen Code zu verschlüsseln, scheitert die Überprüfung der Tokensignatur und Sie können mit der von Ihnen festgelegten Bestrafung fortfahren.

Hier können Sie live sehen Beispiel des JWT-Inhalts decodiert und codiert.

https://jwt.io/

hoffe, das hilft!

0

Sie können die Kopfzeile wie folgt einstellen.

HttpPost post = new HttpPost("someurl"); 
    post.addHeader(key1, value1)); 
    post.addHeader(key2, value2)); 

Besuche Setting Header in request header, um weitere Informationen über den Header in Ruhe Anfrage einstellen.