带冒号的密码失败基本身份验证?

use*_*701 13 java

我正在使用基本身份验证.如果我的密码包含冒号,我似乎无法进行身份验证.密码中不允许使用冒号吗?我如何进行身份验证:

DefaultHttpClient client = new DefaultHttpClient();
HttpRequestInterceptor preemptiveAuth = new HttpRequestInterceptor() {
    ...
};
client.addRequestInterceptor(preemptiveAuth, 0);
client.getCredentialsProvider().setCredentials(
  new AuthScope("example.com", 443),
  new UsernamePasswordCredentials("me", "password:test"));
Run Code Online (Sandbox Code Playgroud)

没有冒号的密码始终有效.带冒号的密码总是失败.在将密码交给UsernamePasswordCredentials类构造函数之前,我是否必须以某种方式转义密码?我知道basicauth使用用冒号分隔的用户名/密码,然后是base64编码,这就是问题所在吗?

谢谢

----更新------

谢谢大家,是的,我正在与之通信的服务器中出现问题!

blo*_*art 23

它应该工作.RFC2617是围绕HTTP身份验证的RFC.规范不对密码中使用的字符设置任何限制,仅限用户名;

要接收授权,客户端会在凭证中的base64 [7]编码字符串中发送用单个冒号(":")分隔的用户标识和密码.

  basic-credentials = base64-user-pass
  base64-user-pass  = <base64 [4] encoding of user-pass,
                      except not limited to 76 char/line>
  user-pass   = userid ":" password
  userid      = *<TEXT excluding ":">
  password    = *TEXT
Run Code Online (Sandbox Code Playgroud)


Jon*_*han 5

如果服务器在分离Base64"username:password"时存在错误,则身份验证方法将失败.检查您的服务器(可能有可用的更新?使用不同的服务器?),不要在密码中使用冒号,或使用其他身份验证方法.

出于好奇,你想要对哪个服务器进行身份验证?