development

Android에서 HTTP 인증을 수행하는 방법은 무엇입니까?

big-blog 2020. 10. 25. 12:34
반응형

Android에서 HTTP 인증을 수행하는 방법은 무엇입니까?


org.apache.http.auth 클래스를 확인하고 있습니다. 누군가가 있다면 더 많은 참조 또는 예가 있습니까?


이전에 특정 패키지를 만난 적이 없지만 클라이언트 측 HTTP 인증을위한 것이라고 말합니다. Android에서 java.netAPI를 사용하여 다음 과 같이 할 수있었습니다 .

Authenticator.setDefault(new Authenticator(){
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication("myuser","mypass".toCharArray());
    }});
HttpURLConnection c = (HttpURLConnection) new URL(url).openConnection();
c.setUseCaches(false);
c.connect();

분명히 getPasswordAuthentication ()은 상수를 반환하는 것보다 더 지능적인 작업을 수행해야합니다.

POST인증을 사용하여 본문 (예 :) 을 사용하여 요청하려는 경우 Android 문제 4326에 주의하십시오 . 플랫폼에 제안 된 수정 사항을 링크했지만 기본 인증 만 원하는 경우 간단한 해결 방법이 있습니다. 인증 자에 신경 쓰지 말고 대신 다음을 수행하십시오.

c.setRequestProperty("Authorization", "basic " +
        Base64.encode("myuser:mypass".getBytes(), Base64.NO_WRAP));

저에게는 효과가있었습니다.

final String basicAuth = "Basic " + Base64.encodeToString("user:password".getBytes(), Base64.NO_WRAP);

Apache HttpCLient :

request.setHeader("Authorization", basicAuth);

HttpUrlConnection :

connection.setRequestProperty ("Authorization", basicAuth);

http 헤더를 수동으로 삽입하여 요청할 수 있습니다.

HttpGet request = new HttpGet(...);
request.setHeader("Authorization", "Basic "+Base64.encodeBytes("login:password".getBytes()));

수동 메서드는 import android.util.Base64와 잘 작동하지만 encode 호출시 Base64.NO_WRAP를 설정해야합니다.

String basicAuth = "Basic " + new String(Base64.encode("user:pass".getBytes(),Base64.NO_WRAP ));
connection.setRequestProperty ("Authorization", basicAuth);

내 Android 프로젝트의 경우 여기에서 Base64 라이브러리를 사용했습니다.

http://iharder.net/base64

매우 방대한 라이브러리이고 지금까지 아무런 문제가 없었습니다.


이것은 나를 위해 작동합니다

 URL imageUrl = new URL(url);
                    HttpURLConnection conn = (HttpURLConnection) imageUrl
                            .openConnection();
                    conn.setRequestProperty("Authorization", "basic " +
                            Base64.encode("username:password".getBytes()));
                    conn.setConnectTimeout(30000);
                    conn.setReadTimeout(30000);
                    conn.setInstanceFollowRedirects(true);
                    InputStream is = conn.getInputStream();

참고 URL : https://stackoverflow.com/questions/1968416/how-to-do-http-authentication-in-android

반응형