[JAVA] Aufbau eines Autorisierungsservers mit Authlete und Kommunikation vom OAuth-Client (Webanwendung)

Ein Memo bei Verwendung des Cloud-Dienstes Authlete zum schnellen Erstellen eines OAuth-Servers.

Authlete ist ein Cloud-Dienst zum Erstellen eines OAuth2.0-Servers und eines OpenID-Anbieters. Es ist selbstverständlich, einen Server zu erstellen, der OAuth 2.0 und OpenID Connect mit Honki unterstützt. Durch Delegieren des Mendokusai-Prozesses an Authlete können Sie jedoch problemlos einen Autorisierungsserver erstellen.

Voraussetzungen

Um den Artikel zu vereinfachen, gehen wir davon aus, dass Sie über Kenntnisse in OAuth / OpenID Connect verfügen. Sie kennen die Verarbeitungssequenz des Berechtigungscode-Erteilungsflusses.

Umgebung

Mac OS X 10.12.6 (macOS Sierra) Apache Maven 3.2.3 Java version: 1.8.0_25 git version 2.11.0 (Apple Git-81)

Ich mache es in, aber wenn Maven und Git funktionieren, denke ich, dass alles, einschließlich des Betriebssystems, in Ordnung ist

Darüber hinaus lauten die Zeichen wie verschiedene Server wie folgt:

Servername Verwenden URL
java-oauth-server Ein Server, der Autorisierungsinformationen für jede Benutzer-ID verwaltet. Wird als Autorisierungsserver bezeichnet http://oauth.example.com:8080/
java-resource-server Ein Server mit Daten und Funktionen für jede Benutzer-ID. Wird als Ressourcenserver bezeichnet http://resource.example.com:8081/
java-oauth-client Webanwendung, die die Ressourcen des Ressourcenservers verwendet http://client.example.com:8082/

In dieser Umgebung wird jeder Server lokal gestartet. Lösen Sie den Namen daher mit / etc / hosts entsprechend in 127.0.0.1 auf. Natürlich können Sie es an jeden Ort wie EC2 von AWS geben.

Rauer Fluss

Der allgemeine Fluss ist wie folgt.

  1. Melden Sie sich bei Authlete an
  2. Autorisierungsserverregistrierung / Clientregistrierung
  3. Aufbau des Autorisierungsservers und des Ressourcenservers
  4. Kommunikation von Webanwendungen

Bedienung auf dem Authlete-Verwaltungsbildschirm

Anmeldung und Registrierung / Erstellung von Autorisierungsserverinformationen

Melden Sie sich zunächst an, um Authlete zu verwenden. Melden Sie sich über die rechte Schulter von https://www.authlete.com/ an.

01.png

Geben Sie im nächsten Bildschirm Ihre ID / Ihr Passwort / Ihre Adresse wie unten gezeigt ein.

02.png

Nach Abschluss der Anmeldung wird die obere Seite angezeigt.

03.png

Es scheint, dass ein Konto erstellt wurde und bereits ein Autorisierungsserver (Service 385xxxxxxxx) erstellt wurde.

Der API-Schlüssel und das API-Geheimnis werden angezeigt. Da sie jedoch später beim Erstellen eines Autorisierungsservers und eines Ressourcenservers verwendet werden,

API-Schlüssel API-Geheimnis
385xxxxxxxx NeE89hxxxxxxxxxxxxxxxxxxx

Notieren Sie es.

Das nächste Login ist übrigens https://so.authlete.com/ Melden Sie sich mit Ihrer Cocokara ID / Ihrem Passwort an.

Kundenregistrierung / -erstellung

Wenn Sie in der obigen Erfassung auf die URL von "Client App Developer Console" zugreifen, wird ein Anmeldebildschirm für Cliententwickler angezeigt, der sich von den oben genannten unterscheidet. Dies ist der Verwaltungsbildschirm des OAuth-Clients, und Sie können sich mit dem oben genannten API-Schlüssel (385xxxxxxxx) und dem API-Geheimnis (NeE89hxxxxxxxxxxxxxxxxxxxxx) anmelden.

04.png

Wenn Sie sich anmelden, wird der Clientname (Client 4455xxxx) wie oben angezeigt und die Client-ID und das Clientgeheimnis dieses Clients werden angezeigt. Notieren Sie sich diese, da sie später beim Erstellen eines OAuth-Clients oder einer Webanwendung verwendet werden.

Kunden ID Kundengeheimnis
4455xxxx FZlETE9xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Organisieren

Nun, einmal organisiert,

Wurde ausgezahlt. Wenn Sie ein Konto für Authlete erstellen, wird ein Autorisierungsserver (Service 385xxxxxxxx) erstellt, und ein damit verbundener Client (Client 4455xxxxx) scheint automatisch erstellt zu werden.

Aufbau von Autorisierungsserver und Ressourcenserver

Erstellen Sie als Nächstes einen Autorisierungsserver, der den OAuth-Client zum Zugriff auf Benutzerinformationen autorisiert, und einen Ressourcenserver, der Anforderungen vom OAuth-Client empfängt und die Verarbeitung gemäß den Berechtigungen ausführt.

In dieser Konstruktion werde ich den folgenden von Authlete bereitgestellten Code verwenden.

Zum Erstellen müssen Sie lediglich den obigen Code von GitHub löschen und den API-Schlüssel und das API-Geheimnis schreiben, die bei der Anmeldung bei der Konfigurationsdatei ausgegeben wurden.

Erstellen eines Autorisierungsservers

Erstellen Sie einen Autorisierungsserver. Sie müssen lediglich das Repository klonen und den API-Schlüssel und das API-Geheimnis in der Konfigurationsdatei (authlete.properties) festlegen.

$ git clone https://github.com/authlete/java-oauth-server.git
$ cd java-oauth-server
$ cat authlete.properties
service.api_key =385xxxxxxxx ← Bitte wechseln Sie zum richtigen API-Schlüssel
service.api_secret =NeE89hxxxxxxxxxxxxxxxxxxxx ← Bitte wechseln Sie zum richtigen API-Geheimnis
$ mvn clean jetty:run

Erstellen eines Ressourcenservers

Erstellen Sie als Nächstes einen Ressourcenserver. Sie müssen lediglich das Repository klonen und den API-Schlüssel und das API-Geheimnis in der Konfigurationsdatei (authlete.properties) festlegen. Es ist die gleiche Arbeit wie beim Autorisierungsserver.

$ git clone https://github.com/authlete/java-resource-server.git
$ cd java-resource-server/
$ cat authlete.properties
service.api_key =385xxxxxxxx ← Bitte wechseln Sie zum richtigen API-Schlüssel
service.api_secret =NeE89hxxxxxxxxxxxxxxxxxxxx ← Bitte wechseln Sie zum richtigen API-Geheimnis
$ mvn clean jetty:run

Der Ressourcenserver ist übrigens

curl http://resource.example.com:8081/api/country/JP -H "Authorization: Bearer xxxxxxxxxxx" -G

Wenn Sie eine Autorisierung mit einem Zugriffstoken anfordern und das Zugriffstoken korrekt ist,

{
  "name": "Japan",
  "alpha2": "JP",
  "alpha3": "JPN",
  "numeric": 392,
  "currency": "JPY"
}

Es wird gemacht, um eine Antwort wie zurückzugeben.

Damit ist der Aufbau des Autorisierungsservers und des Ressourcenservers abgeschlossen.

Kommunikation von Webanwendungen

Kommunizieren Sie als Nächstes über die Webanwendung. Webanwendung hat eine URL http://client.example.com:8082/RedirectServlet Nehme an, dass Versuchen Sie, dasselbe Servlet http://client.example.com:8082/RedirectServlet als Umleitungsziel zu verwenden, nachdem Sie den Autorisierungscode erhalten haben.

Übrigens ist die Verarbeitungssequenz des Authorization Code Grant Flow wie folgt. Wenn Authlete vom Autorisierungsserver aufgefordert wird, einen Autorisierungscode auszugeben, ein Zugriffstoken basierend auf dem Autorisierungscode ausgibt oder wenn der Ressourcenserver ein Zugriffstoken von einer Webanwendung empfängt, ist das Zugriffstoken korrekt? Hier erfahren Sie, mit wem das Token verknüpft ist.

sequence.png

Registrierung des Weiterleitungsziels

Registrieren Sie den Umleitungsziel-URI dieser Webanwendung in Authlete. Öffnen Sie die Client App Developer Console und klicken Sie unten auf die Schaltfläche Bearbeiten.

05.png

Danach gibt es auf der Registerkarte Autorisierung eine Einstellung namens Umleitungs-URI. Schreiben Sie also "http://client.example.com:8082/RedirectServlet" und klicken Sie auf die Schaltfläche "Aktualisieren", um den Vorgang abzuschließen.

06.png

Es wurde registriert.

Erstellen Sie eine Webanwendung

Die Webanwendung entspricht dem obigen Sequenzdiagramm

  1. Klicken Sie auf dem Webbildschirm auf einen Link wie Anmelden mit ○○ (das Linkziel ist RidirectServlet).
  2. Bildschirmanzeige des Autorisierungsservers (vom Servlet mit 302 umgeleitet)
  3. Der Benutzer führt einen Authentifizierungs- / Autorisierungsvorgang auf dem Autorisierungsserver aus
  4. Nach dem Autorisierungsvorgang wird der Autorisierungscode generiert und der Autorisierungsserver leitet zum angegebenen URI um (mit 302 zum ursprünglichen Servlet umgeleitet und zurückgegeben).
  5. Wenn Sie zurückkommen, greifen Sie mit dem Autorisierungscode auf den Autorisierungsserver zu und erhalten Sie ein Zugriffstoken
  6. Verwenden Sie das Zugriffstoken, um die Ressourcenserver-API aufzurufen (z. B. nach der Datenerfassung zu fragen).
  7. Ergebnisse erhalten

Was für ein Verarbeitungsablauf ist das, aber da ich ein solches Servlet erstellt habe, werde ich dieses Projekt so verwenden, wie es ist.

Ändern Sie nach dem Löschen die Werte von client_id und client_secret in der Einstellungsdatei (settings1.properties) in Client-ID und Client-Geheimnis, wie unten gezeigt.

$ git clone https://github.com/masatomix/java-oauth-client.git
$ cd java-oauth-client/
$ git checkout -t origin/feature/forQiita
$ cat src/main/resources/settings1.properties
client_id =4455xxxx ← Bitte ändern Sie die richtige Client-ID
client_secret =FZlETE9xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ← Bitte wechseln Sie zum richtigen Client-Geheimnis
$ mvn clean jetty:run

Versuche zu kommunizieren.

Wenn Sie auf http://client.example.com:8082/ zugreifen, wird der Link "Autorisierungsverarbeitung mit OAuth-Server mithilfe von Authlete" angezeigt. Klicken Sie darauf.

07.png

Anschließend gibt der Autorisierungsserver Folgendes aus: "Diese Webanwendung möchte auf Ihre Informationen zugreifen, diese jedoch autorisieren?". Nachdem der Benutzer darüber nachgedacht hat, sagt er "Wer bin ich"? Geben Sie Ihr Passwort ein und drücken Sie Autorisieren, um den Zugriff zu autorisieren.

08.png

Da der von Authlete bereitgestellte Autorisierungsserver und Ressourcenserver mit einer Dummy-Benutzerauthentifizierung codiert sind,

Login ID Password
john john

Bitte authentifizieren und autorisieren Sie sich mit dem Konto.

Wenn die Webanwendung autorisiert ist, wird ein Autorisierungscode an die Webanwendung ausgegeben und mit 302 zurück zum ursprünglichen Servlet umgeleitet. Darüber hinaus fordert das Servlet den Autorisierungsserver auf, das Zugriffstoken abzurufen, und erhält das Zugriffstoken vom Autorisierungsserver. Sobald Sie das Zugriffstoken vom Autorisierungsserver erhalten haben, befindet sich das Servlet im HTTP-Header

Authorization:Träger uU3Xml7rdxxxxxxxxx ← Zugriffstoken

So fordern Sie den Ressourcenserver auf, Daten zu erfassen. Nachdem Authlete die Gültigkeit des Tokens überprüft hat, führt der Ressourcenserver die Logik aus und gibt die Daten an das Servlet zurück.

Es ist in Ordnung, wenn eine Reihe dieser Prozesse ausgeführt wird und die Daten schließlich auf den Bildschirm zurückgegeben werden.

09.png

Danke für deine harte Arbeit.

Bei der Verarbeitung im Servlet

Ich habe verschiedene Dinge geschrieben, wie, aber wenn Sie interessiert sind, beziehen Sie sich bitte auf den Code.

Übrigens, bitte beachten Sie, dass es beim eigentlichen Aufbau der Produktion verschiedene sicherheitsrelevante Überlegungen gibt, wie z. B. CSRF-Maßnahmen.

ähnliche Links

Recommended Posts

Aufbau eines Autorisierungsservers mit Authlete und Kommunikation vom OAuth-Client (Webanwendung)
Eine Anwendung, die den Wert des Beschleunigungssensors durch UDP-Kommunikation zwischen C # und Android erfasst
Aufbau eines Autorisierungsservers mit Authlete und Kommunikation vom OAuth-Client (Webanwendung)
Rails-Webserver und Anwendungsserver
Implementierung der Google-Anmeldung mithilfe der Google OAuth 2.0-Authentifizierung (Server Edition)
Socket-Kommunikation mit einem Webbrowser über Java und JavaScript ②
Socket-Kommunikation mit einem Webbrowser über Java und JavaScript ①