Dropbox Anbindung, Hilfe bei Authentification -> HttpServletRequest request

Hallo zusammen,

ich bin gerade dabei Dropbox in meine App zu integrieren und habe hier ein Problem bei der Authentification.
Folgender Ablauf:
1. HTML Button „Authorize Dropbox“ klicken in der WebApp
2. Redirect zu Dropbox
3. User akzeptiert access zur Dropbox
4. Dropbox generiert einen Token

Hier mal ein Bild:


Schritt 1-3 funktionieren.
Bei Nr. 4 generiert mir Dropbox auch einen Code, aber ich bekomme dafür eine zusätzliche Seite bei Dropbox.com angezeigt.
Es gibt auch die Möglichkeit, dass Dropbox nach 3) automatisch zu einer definierten Seite zurückkehrt und den Access Token mitgibt.

Ich muss wohl den "HttpServletRequest" hierzu nutzen.

Hier mal mein Code:

JSF - Seite
HTML:
<h:form>
<p:commandButton value="Connect Dropbox"
    actionListener="#{cloudStorageEditController.connectDropbox()}" ajax="true" />
</h:form>
Bean:
Java:
/**
     * Redirect to Dropbox
     * @throws IOException
     */
    public void connectDropbox() throws IOException {
        String url = dropboxService.generateAuthorizeUrl(httpRequest, response);
        ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
        ec.redirect(ec.getRequestContextPath() + url);
    }
Hier die Methode, um die URL für die Weiterleitung zu generieren. Diese enthält dann die Info auf welche Applikation die Freigabe erteilt wird.
Die Info kommt auf APP_KEY, APP_SECRET -> Welche man in der Dropbox GUI erhält.

Java:
public String generateAuthorizeUrl(HttpServletRequest request, HttpServletResponse response) {

        // Only display important log messages.
        // Read app info file (contains app key and app secret)
        DbxAppInfo appInfo;
        appInfo = new DbxAppInfo(APP_KEY, APP_SECRET);

        // Run through Dropbox API authorization process
        DbxRequestConfig requestConfig = new DbxRequestConfig("foo");
        DbxWebAuth webAuth = new DbxWebAuth(requestConfig, appInfo);

        DbxWebAuth.Request authRequest = DbxWebAuth.newRequestBuilder()
                // After we redirect the user to the Dropbox website for authorization,
                // Dropbox will redirect them back here.
                .withRedirectUri("http://localhost:8080/portal/storageCloudHosterEdit.jsf", getSessionStore(request))
                .build();
       
        String authorizeUrl = webAuth.authorize(authRequest);

        return authorizeUrl;
    }
Was also mein Problem ist, wie befülle ich "HttpServletRequest request" ?
Und wie erhalte ich den Request zurück (der Token, der bei Schritt 4) zurückgegeben wird)

Danke für eure Hilfe.
 
Ohne mich mit wirklich mit der Dropbox-API auszukennen:
wie befülle ich "HttpServletRequest request" ?
Welchen Request? Den in generateAuthorizeUrl? - der ist doch mit den Anfrageparametern des Clients befüllt worden durch deinen web-container. Was willst du da setzen?

Und wie erhalte ich den Request zurück (der Token, der bei Schritt 4) zurückgegeben wird)
In der Beschreibung des Bildes steht: 4. Dropbox redirects the user back to your app using the redirect_uri you provided. Diese konfigurierst du ja selbst mit
.withRedirectUri("http://localhost:8080/portal/storageCloudHosterEdit.jsf", getSessionStore(request)).
D.h. du erhältst in dieser Route von Dropbox einen Request, gefüllt mit einem Token oder ähnlichen Informationen (sofern die Authentifizierung erfolgreich war). Das ist die Antwort von Dropbox auf deinen Authentifizierungs-Request.
 
Ok, das mit der Weiterleitung funktioniert. Der HttpServletRequest war nicht gefüllt.

Wie bekomme ich nun aber den Request von Dropbox?
In der URL sehe ich bereits den Code den Dropbox zurückliefert...

Habe es nun so versucht:
Java:
    @PostConstruct
    public void init() {

        try {
            // Dropbox
            String code = FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap()
                    .get("code");

        } catch (Exception e) {

        }
    }
Aber nachdem ich von Dropbox zurückkomme, wird diese Methode nicht nochmal aufgerufen. Hab es mit @RequestScoped und mit @ViewScoped versucht...
 
OK, funktioniert auch...

Nun aber noch was generelles:
Von Dropbox bekomme ich einen Code zurück, den erhalte ich derzeit über die Redirect URL.
Diesen wiederum verwende ich, um den Token zu generieren. Welchen ich in der Datenbank speichere.

-> Sollte ich den Token in meiner Datenbank nochmal selbst verschlüsseln?
 
Passende Stellenanzeigen aus deiner Region:

Oben