OAuth-Client für Java: ScribeJava und Spring Security OAuth2
In der modernen Webentwicklung ist die Integration mit externen Diensten über das OAuth 2.0-Protokoll zum De-facto-Standard geworden. Ob es sich um die Anmeldung über Google, GitHub, Facebook oder den Zugriff auf APIs von Drittanbieterplattformen handelt – Java-Entwickler benötigen ein zuverlässiges Werkzeug für die Arbeit mit OAuth. In diesem Artikel betrachten wir zwei wichtige Bibliotheken im Detail: ScribeJava (leichtgewichtig und vielseitig) und Spring Security OAuth2 (Teil des Spring-Ökosystems). Sie erfahren, wie Sie das passende Werkzeug auswählen und einen OAuth-Client in Java implementieren.
Was ist ein OAuth-Client und warum wird er benötigt?
Ein OAuth-Client ist eine Softwarekomponente, die es Ihrer Anwendung (dem Client) ermöglicht, sicher auf Benutzerressourcen auf einem externen Server (dem Anbieter) zuzugreifen, ohne das Passwort weiterzugeben. Stattdessen wird ein Austausch von Zugriffstoken verwendet. In Java wird dies durch spezialisierte Bibliotheken realisiert, die die gesamte Komplexität des Protokolls übernehmen: Generierung der Autorisierungs-URL, Verarbeitung des Callbacks, Abruf und Aktualisierung von Token.
1. ScribeJava – ein leichter und unabhängiger OAuth-Client
ScribeJava (früher Scribe) ist eine minimalistische, aber leistungsstarke Bibliothek für OAuth 1.0a und OAuth 2.0. Sie ist nicht an Frameworks gebunden, was sie ideal für Microservices, normale Java-Anwendungen oder Android macht. Hauptvorteile:
- Unterstützung für Dutzende von Anbietern "out of the box" (Google, Facebook, GitHub, VK, Yandex u. a.)
- Einfache und intuitive API
- Keine überflüssigen Abhängigkeiten
- Unterstützung für PKCE (Proof Key for Code Exchange) für öffentliche Clients
Beispiel: Autorisierung über GitHub mit ScribeJava
Betrachten wir ein grundlegendes Szenario – den Abruf eines Access Tokens von GitHub. Fügen Sie zunächst die Abhängigkeit in Ihre pom.xml ein:
<dependency> <groupId>com.github.scribejava</groupId> <artifactId>scribejava-apis</artifactId> <version>8.3.3</version></dependency>Nun der Code des OAuth-Clients:
import com.github.scribejava.apis.GitHubApi;import com.github.scribejava.core.builder.ServiceBuilder;import com.github.scribejava.core.model.OAuth2AccessToken;import com.github.scribejava.core.model.OAuthRequest;import com.github.scribejava.core.model.Response;import com.github.scribejava.core.model.Verb;import com.github.scribejava.core.oauth.OAuth20Service;
public class GitHubOAuthExample { public static void main(String[] args) throws Exception { final String clientId = "ihre_client_id"; final String clientSecret = "ihr_client_secret"; final String callbackUrl = "http://localhost:8080/callback";
// OAuth 2.0 Service erstellen OAuth20Service service = new ServiceBuilder(clientId) .apiSecret(clientSecret) .callback(callbackUrl) .scope("user:email") // Zugriff auf E-Mail anfordern .build(GitHubApi.instance());
// Schritt 1: URL für die Weiterleitung des Benutzers abrufen final String authorizationUrl = service.getAuthorizationUrl(); System.out.println("Folgen Sie dem Link zur Autorisierung: " + authorizationUrl);
// Schritt 2: Nach der Weiterleitung den Code aus dem Callback extrahieren // (normalerweise in einem Controller, hier zur Veranschaulichung über Konsoleneingabe) System.out.print("Geben Sie den Code aus dem Callback ein: "); java.util.Scanner scanner = new java.util.Scanner(System.in); String code = scanner.nextLine();
// Schritt 3: Code gegen Access Token eintauschen OAuth2AccessToken accessToken = service.getAccessToken(code); System.out.println("Access Token: " + accessToken.getAccessToken());
// Schritt 4: Token für eine API-Anfrage verwenden OAuthRequest request = new OAuthRequest(Verb.GET, "https://api.g Auch in der Bibliothek
GraphQL-Bibliotheken für TypeScript: Vollständiger Leitfaden zur Auswahl und Verwendung
conditional-type-checks für TypeScript: Komplettguide mit Beispielen
ts-jest für TypeScript: Vollständige Anleitung mit Beispielen
golangci-lint für Go: Vollständige Anleitung mit Beispielen