Digest Authentifizierung

T

Tashtego

Gast
Hallo.

Ich habe einen FTP Zugang, der von Basic auf Digest Authentifizierung geändert wurde. Ich habe bereits alles mögliche probiert, bekomme aber immer 403 Forbidden. Und das blöde daran: Über den Browser klappt Basic Auth und ich komme an die Dateien... Was sehe ich hier noch nicht? Oder was mache ich anders? Hat jemand ne Idee?

Java:
package bla;

import java.io.IOException;
import java.net.URL;

import org.apache.http.Header;
import org.apache.http.HttpHost;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.MalformedChallengeException;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.AuthCache;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.protocol.HttpClientContext;
import org.apache.http.impl.auth.DigestScheme;
import org.apache.http.impl.client.BasicAuthCache;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

/**
 *
 * @author me
 *
 */
public class DigestAuthentication {

    private final static String uri = "https://some-url.com:443";

    private static HttpHost target;

    public static void main(String[] args) throws IOException {

        URL url = new URL(uri);
        target = new HttpHost(url.getHost(), url.getPort(), url.getProtocol());

        if(target == null) {
            System.out.println("Setup was unsuccesfull");
            return;
        }

        Header challengeHeader = getAuthChallengeHeader();
        if(challengeHeader == null) {
            System.out.println("Setup was unsuccesfull");
            return;
        }

        getWithDigestAuth(challengeHeader, "/some-folder/");

    }

    /**
     *
     * @return
     */
    private static Header getAuthChallengeHeader() {
        try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
            CloseableHttpResponse response = httpClient.execute(new HttpGet(uri));
            return response.getFirstHeader("WWW-Authenticate");
        } catch(IOException e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     *
     * @param challengeHeader
     * @param request
     * @throws IOException
     */
    private static void getWithDigestAuth(Header challengeHeader, String request) throws IOException {

        CredentialsProvider credsProvider = new BasicCredentialsProvider();
        credsProvider
                .setCredentials(new AuthScope(AuthScope.ANY), new UsernamePasswordCredentials("user", "pwd"));

        try (CloseableHttpClient httpclient = HttpClients.custom().setDefaultCredentialsProvider(credsProvider)
                .build()) {

            AuthCache authCache = new BasicAuthCache();
            DigestScheme digestAuth = new DigestScheme();
            digestAuth.overrideParamter("realm", "Restricted");
            digestAuth.overrideParamter("qop", "auth");
            digestAuth.overrideParamter("algorithm", "MD5");
            //digestAuth.overrideParamter("nonce", Long.toString(new Random().nextLong(), 36));
            //digestAuth.overrideParamter("nc", "2");
            digestAuth.overrideParamter("cnonce", DigestScheme.createCnonce());
            digestAuth.overrideParamter("opaque", "???");

            digestAuth.processChallenge(challengeHeader);
            authCache.put(target, digestAuth);

            HttpClientContext localContext = HttpClientContext.create();
            localContext.setAuthCache(authCache);

            System.out.println("Executing request to target " + target + request);
            try (CloseableHttpResponse response = httpclient.execute(target, new HttpGet(request), localContext)) {
                System.out.println(response.getStatusLine());
                System.out.println(EntityUtils.toString(response.getEntity()));
            } catch(Exception e) {
                System.out.println("Error while executing HTTP GET request");
                e.printStackTrace();
            }
        } catch(MalformedChallengeException e) {
            e.printStackTrace();
        }
    }
}
 

LimDul

Top Contributor
Hmm, du schreibst FTP Zugang, aber unten hast du HTTP Zugriffe? Ich gehe davon aus, dass du auch HTTP meinst, weil bei FTP wären mir komplizierte Verfahren als user+Passwort neu (deswegen gibt es ja SFTP & Co)
 

Ähnliche Java Themen

Neue Themen


Oben