[JAVA] Spielen Sie mit dem Jersey OAuth 2-Client

Dies ist der 17. Tag von Java EE Adventskalender 2016.

Überblick

Jersey, die Referenzimplementierung von JAX-RS, verfügt über eine Erweiterung, die OAuth 2-Clients unterstützt. Diesmal habe ich damit eine Probe gemacht. Übrigens habe ich den Authentifizierungsserver mit Spring erstellt.

Beispielcode ist auf GitHub verfügbar.

Beispielbeschreibung

Die Anwendung selbst ist so einfach wie die Anzeige von "Hallo, !". Der diesem Benutzernamen entsprechende Teil wird angezeigt, indem der Name des vom Authentifizierungsserver authentifizierten Benutzers erfasst wird. OAuth 2 gibt die Berechtigung zum Abrufen von Benutzerinformationen.

Versuchen Sie zunächst, http: // localhost: 8080 / helloworld zu öffnen.

open-helloworld.png

Anschließend werden Sie zum Authentifizierungsserver umgeleitet und aufgefordert, sich anzumelden.

authentication.png

Sobald Sie angemeldet sind, werden Sie gefragt, ob Sie der helloworld-Anwendung die Berechtigung zum Abrufen von Benutzerinformationen erteilen möchten.

oauth-approval.png

Nach Erteilung der Erlaubnis kehren Sie mit einer Begrüßung zur helloworld-Anwendung zurück.

helloworld.png

Codebeschreibung

Wenn das Zugriffstoken nicht in der Sitzung gespeichert ist, stellt die helloworld-Anwendung fest, dass es nicht autorisiert ist, und verwendet die Startmethode von OAuth2CodeGrantFlow, um den Autorisierungscode zum Abrufen des Zugriffstokens abzurufen. Erstellen einer Umleitungs-URI](https://github.com/backpaper0/javaeeac2016/blob/qiita/helloworld/src/main/java/com/example/UaaFilter.java#L74-L80).

OAuth2CodeGrantFlow flow = OAuth2ClientSupport.authorizationCodeGrantFlowBuilder(
        clientIdentifier, authorizationUri, accessTokenUri)
        .redirectUri(redirectUri)
        .client(client)
        .property(Phase.ALL, OAuth2Parameters.STATE, state.getValue())
        .build();
URI location = URI.create(flow.start());

Nach der Autorisierung werden Sie zu dem URI weitergeleitet, der in der obigen Methode "redirectUri" festgelegt wurde. Zu diesem Zeitpunkt wird der Autorisierungscode jedoch als Abfrageparameter mit dem Namen "code" angehängt. Nachdem Sie den Anforderungs-URI analysiert haben, um den "Code" abzurufen, übergeben Sie ihn an die "finish" -Methode des "OAuth2CodeGrantFlow", um das Zugriffstoken zu erhalten /src/main/java/com/example/UaaFilter.java#L61-L68).

OAuth2CodeGrantFlow flow = OAuth2ClientSupport.authorizationCodeGrantFlowBuilder(
        clientIdentifier, authorizationUri, accessTokenUri)
        .redirectUri(redirectUri)
        .client(client)
        .property(Phase.ALL, OAuth2Parameters.STATE, state.getValue())
        .build();
String state = queryParameters.getFirst("state");
TokenResult tokenResult = flow.finish(code, state);

Beim Abrufen von Benutzerinformationen wird das Zugriffstoken in den Header "Authorization" eingebettet, aber es ist die [feature -Methode von OAuth2ClientSupport](https: //), die das Feature generiert, das dies für Sie erledigt. github.com/backpaper0/javaeeac2016/blob/qiita/helloworld/src/main/java/com/example/OAuth2ClientFactory.java#L30). Registrieren Sie dieses Feature in Client.

public Client client() {
    return ClientBuilder.newBuilder()
            .register(HttpAuthenticationFeature.basic(clientId, clientSecret))
            .register(OAuth2ClientSupport.feature(accessToken.getValue()))
            .build();
}

Zusammenfassung

Mit Jerseys "oauth2-client" konnte ich mit OAuth 2 eine Client-Anwendung erstellen. Wie Sie dem Beispielcode entnehmen können, musste ich es so machen, wie es war (obwohl mein "oauth2-client" möglicherweise nicht über ausreichende Kenntnisse verfügt). Außerdem habe ich versucht, es vorerst zum Laufen zu bringen, daher denke ich, dass bei der Implementierung weitere Dinge zu beachten sind.

Auf diese Weise wünschte ich, ich könnte es leicht machen, aber ich war zufrieden, weil ich eine bewegliche Probe machen könnte.

Über ⛄️

Recommended Posts

Spielen Sie mit dem Jersey OAuth 2-Client
API-Integration von Java mit Jersey Client
Java zum Spielen mit Function
GraphQL Client beginnend mit Ruby
Ich habe versucht, einen OAuth-Client mit Spring Boot / Security (LINE-Anmeldung) zu implementieren.
[Java EE] Implementieren Sie den Client mit WebSocket
Doppelte Übermittlung von Maßnahmen mit Play Framework
Oauth2-Authentifizierung mit Spring Cloud Gateway
Tweak Markdown mit Java Flexmark-Java
Bildverarbeitung: Spielen wir mit dem Bild