OAuth-Client für Java: Wie man auswählt und verwendet
\n\nOAuth (Open Authorization) ist ein offenes Protokoll, das es einem Drittanbieter (z. B. Ihrer Java-Anwendung) ermöglicht, eingeschränkten Zugriff auf Benutzerressourcen zu gewähren, ohne dessen Login und Passwort zu übertragen. In der modernen Webentwicklung ist OAuth 2.0 der De-facto-Standard für die Autorisierung über soziale Netzwerke (Google, Facebook, VK) und Unternehmenssysteme (Microsoft, GitHub).
\n\nFür Java gibt es mehrere ausgereifte Bibliotheken, die sowohl die Rolle eines OAuth-Clients als auch eines Servers implementieren. In diesem Artikel betrachten wir drei der beliebtesten Lösungen: ScribeJava, Spring Security OAuth und Google OAuth Client Library for Java. Sie erfahren, wie Sie diese in Ihr Projekt einbinden, eine grundlegende Integration schreiben und das passende Werkzeug für Ihre Aufgaben auswählen.
\n\n1. ScribeJava – Leichtgewichtiger OAuth-Client
\n\nScribeJava ist eine einfache und leichtgewichtige Bibliothek, die OAuth 1.0a und OAuth 2.0 unterstützt. Sie ist ideal für Standalone-Anwendungen oder Microservices, die keinen vollständigen Spring-Stack benötigen.
\n\nEinbindung (Maven)
\n<dependency>\n <groupId>com.github.scribejava</groupId>\n <artifactId>scribejava-apis</artifactId>\n <version>8.3.3</version>\n</dependency>\n\nBeispiel: Anmeldung über Google
\nimport com.github.scribejava.apis.GoogleApi20;\nimport com.github.scribejava.core.builder.ServiceBuilder;\nimport com.github.scribejava.core.model.*;\nimport com.github.scribejava.core.oauth.OAuth20Service;\n\npublic class GoogleOAuthExample {\n public static void main(String[] args) throws Exception {\n String clientId = "IHRE_CLIENT_ID";\n String clientSecret = "IHR_CLIENT_SECRET";\n String callbackUrl = "http://localhost:8080/callback";\n\n OAuth20Service service = new ServiceBuilder(clientId)\n .apiSecret(clientSecret)\n .callback(callbackUrl)\n .scope("email profile")\n .build(GoogleApi20.instance());\n\n // URL für die Weiterleitung des Benutzers abrufen\n String authorizationUrl = service.getAuthorizationUrl();\n System.out.println("Im Browser öffnen: " + authorizationUrl);\n\n // Nach der Weiterleitung den Autorisierungscode abrufen (in einer echten Anwendung aus dem QueryString)\n String code = "CODE_AUS_DER_WEITERLEITUNG";\n\n // Code gegen Token eintauschen\n OAuth2AccessToken accessToken = service.getAccessToken(code);\n System.out.println("Access Token: " + accessToken.getAccessToken());\n\n // Token verwenden, um Benutzerdaten abzufragen\n OAuthRequest request = new OAuthRequest(Verb.GET, "https://www.googleapis.com/oauth2/v2/userinfo");\n service.signRequest(accessToken, request);\n Response response = service.execute(request);\n System.out.println("API-Antwort: " + response.getBody());\n }\n}\n\nVorteile von ScribeJava:
\n- \n
- Minimale Abhängigkeiten (nur OkHttp oder URLConnection). \n
- Unterstützung für Dutzende von Anbietern direkt aus der Box (Google, Facebook, GitHub, VK u. a.). \n
- Einfache API ohne überladene Abstraktionen. \n
2. Spring Security OAuth – Für Projekte mit Spring Boot
\n\nWenn Sie Spring Boot verwenden, ist Spring Security OAuth (Modul spring-security-oauth2-client) die naheliegendste Wahl. Es ist vollständig in die Security-Kette integriert und ermöglicht die Konfiguration von Anbietern über application.yml.
Einbindung (Gradle)
\nimplementation 'org.springframework.boot:spring-boot-starter-oauth2-client'\n\nBeispielkonfiguration (application.yml)
\nspring:\n security:\n oauth2:\n client:\n registration:\n