Android上的基本身份验证

时间:2012-10-09 18:18:53

标签: android basic-authentication

我找到了一个例子

try {
        String data = "YOUR REQUEST BODY HERE";
        //
        CredentialsProvider credProvider = new BasicCredentialsProvider();
        credProvider.setCredentials(new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT),
            new UsernamePasswordCredentials("YOUR USER NAME HERE", "YOUR PASSWORD HERE"));
        //
        DefaultHttpClient http = new DefaultHttpClient();
        http.setCredentialsProvider(credProvider);
        //
        HttpPut put = new HttpPut("YOUR HTTPS URL HERE");
        try {
            put.setEntity(new StringEntity(data, "UTF8"));
        } catch (UnsupportedEncodingException e) {
            Log.e(TAG, "UnsupportedEncoding: ", e);
        }
        put.addHeader("Content-type","SET CONTENT TYPE HERE IF YOU NEED TO");
        HttpResponse response = http.execute(put);
        Log.d(TAG, "This is what we get back:"+response.getStatusLine().toString()+", "+response.getEntity().toString());
    } catch (ClientProtocolException e) {
        //
        Log.d(TAG, "Client protocol exception", e);
    } catch (IOException e) {
        //
        Log.d(TAG, "IOException", e);
    }

但我必须以授权格式发送字符串:<Login>@<ID>:<Passsword>

怎么做?

2 个答案:

答案 0 :(得分:0)

您应首先查看实际的HTTP Basic是什么:http://en.m.wikipedia.org/wiki/Basic_access_authentication#section_3

您的问题不是针对HTTP Basic,而是由于本身就不安全而根本不应该使用。

我认为你要求的内容应该是URL的一部分。即使使用SSL等其他措施,我仍然不会在网址中嵌入凭据。

HTTP Basic定义了如何加密用户名和密码(实际散列)。无法获得HTTP和您要求的格式。

答案 1 :(得分:0)

您确定您的服务器确实使用了基本身份验证吗?如果是,您应该设置如下凭据:

new UsernamePasswordCredentials("Login@ID", "Passsword");

否则检查实际的身份验证协议是什么并实现它(在标头中发送auth信息,或作为URL的一部分或作为POST参数等)。