[JAVA] Implementierung der Google-Anmeldung mithilfe der Google OAuth 2.0-Authentifizierung (Server Edition)

Überblick

Dieses Mal ist eine Fortsetzung dieses Artikels. Implementierung der Google-Anmeldung mithilfe der Google OAuth 2.0-Authentifizierung (JS Edition) Es ist, als würde man sich auf der Clientseite anmelden und sich auf dem Backend-Server authentifizieren.

Im vorherigen Artikel konnte ich Benutzerinformationen usw. als Antwort erhalten. Es ist jedoch gefährlich, dies so wie es ist an die Serverseite zu senden. Sie können sich beispielsweise als Benutzer ausgeben, wenn Sie eine Benutzer-ID an den Server senden. ..

Verwenden Sie stattdessen ein überprüfbares ID-Token, um auf der Serverseite angemeldete Benutzerinformationen sicher abzurufen.

Lassen Sie es uns sofort implementieren.

Montage an der Vorderseite

Schreiben Sie zuerst den JS-Teil neu.

JavaScript



function onSignIn(googleUser) {
  var id_token = googleUser.getAuthResponse().id_token; //ID-Token abrufen
  //Prozess des Sendens eines ID-Tokens an die Serverseite
}

Ich denke, es gibt verschiedene Möglichkeiten, hier an den Server zu senden, z. B. Ajax oder das Senden mit dem versteckten Attribut. Dieses Mal kommunizieren wir mit dem Server, indem wir eine HTTP-Anfrage mit Ajax XMLHttpRequest ausgeben.

Neben dem vorherigen Prozess

javaScript



var req = new XMLHttpRequest();
req.open('POST', '[URL]’);
req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
req.onload = function() {
req.send('idtoken=' + id_token);

Senden wir es so an den Server. *** Geben Sie die serverseitige URL im Teil [URL] *** ein.

Serverseitige Implementierung

Dieses Mal werden wir es mit Javas Spring Boot implementieren.

Fügen Sie zunächst eine Abhängigkeit hinzu.

build.gradle



dependencies {

implementation("com.google.api-client:google-api-client:1.30.5")

}

Sie können Ihr ID-Token mithilfe der Google Client-Bibliothek ganz einfach überprüfen.

Java



 GoogleIdTokenVerifier verifier =
        new GoogleIdTokenVerifier.Builder(
                new NetHttpTransport(), JacksonFactory.getDefaultInstance())
            .setAudience(Collections.singletonList("YOUR_CLIENT_ID.apps.googleusercontent.com"))
            .build();

 var idtokenStriing = getIdToken(); //ID-Token erhalten

 GoogleIdToken idToken = verifier.verify(idTokenString); //Überprüfung des ID-Tokens
 

Geben Sie Ihre Kunden-ID in YOUR_CLIENT_ID ein.

Wenn Sie die Google-Clientbibliothek nicht verwenden, können Sie die Token-Signatur mit dem öffentlichen Schlüssel von Google (PEM-Format) überprüfen. Google empfiehlt jedoch auch, die Google-Clientbibliothek zur Überprüfung zu verwenden. Lass es uns benutzen.

Sie müssen lediglich die Benutzerinformationen abrufen.

Java



  Payload payload = idToken.getPayload();

  String userId = payload.getSubject(); //Benutzeridentifikation
  String email = payload.getEmail(); //Benutzer-E-Mail-Adresse
  String name = (String) payload.get("name"); //Nutzername
  String pictureUrl = (String) payload.get("picture"); //Benutzerprofilbild
  

Sie können es so bekommen.

Zusammenfassung

Heutzutage verwenden immer mehr Websites die OAuth-Authentifizierung. Diesmal ist es Google, aber ich werde auch OAuth-Authentifizierung wie Facebook und Apple geben.

Recommended Posts

Implementierung der Google-Anmeldung mithilfe der Google OAuth 2.0-Authentifizierung (Server Edition)
Implementierung der Benutzerauthentifizierungsfunktion mit devise (2)
Implementierung der Benutzerauthentifizierungsfunktion mit devise (1)
Implementierung der Benutzerauthentifizierungsfunktion mit devise (3)
SNS-Authentifizierung mit Rails Google
Implementierung der Validierung mit regulären Ausdrücken
[Android] Implementierung von SideVolling ListView mit RecyclerView
Erstellen Sie mit Docker einen Authentifizierungs-Proxyserver
Implementierung von Registerkarten mit TabLayout und ViewPager
Aufbau eines Autorisierungsservers mit Authlete und Kommunikation vom OAuth-Client (Webanwendung)
[Rails] Implementierung der Suchfunktion mit Gem's Ransack
[FCM] Implementierung der Nachrichtenübertragung mit FCM + Spring Boot
[Rails] Implementierung der Bildvergrößerungsfunktion mit Lightbox2
[Rails] Implementierung des PV-Nummernrankings mit Impressionist
[Rails] Implementierung einer Bild-Diashow mit Bootstrap 3