我正在使用基本身份验证.如果我的密码包含冒号,我似乎无法进行身份验证.密码中不允许使用冒号吗?我如何进行身份验证:
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)
如果服务器在分离Base64"username:password"时存在错误,则身份验证方法将失败.检查您的服务器(可能有可用的更新?使用不同的服务器?),不要在密码中使用冒号,或使用其他身份验证方法.
出于好奇,你想要对哪个服务器进行身份验证?
| 归档时间: |
|
| 查看次数: |
8468 次 |
| 最近记录: |