Пароль с двоеточием не имеет базового права?
Я использую basic auth. Если мой пароль содержит двоеточие, я, похоже, не могу пройти проверку подлинности. Не разрешены ли двоеточия в пароле? Как я аутентифицируюсь:
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"));
Пароли без двоеточия всегда работают. Пароли с двоеточием всегда терпят неудачу. Должен ли я каким-то образом избежать пароля, прежде чем передать его конструктору класса UserPasswordCredentials? Я знаю, что basicauth использует имя пользователя/пароль, разделенное двоеточием, а затем закодированное base64, является ли проблема здесь?
Спасибо
---- Обновление ------
Спасибо, да, была проблема на сервере, с которым я общался!
Ответы
Ответ 1
Он должен работать. RFC2617 - это RFC, связанная с HTTP-аутентификацией. Спецификация не помещает никаких ограничений на символы, используемые в пароле, только на имя пользователя;
Чтобы получить авторизацию, клиент отправляет идентификатор пользователя и пароль, разделенных одним символом двоеточия ( ":" ) в пределах 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
Ответ 2
Если у сервера есть ошибка при разделении этого Base64 "имя пользователя: пароль", метод проверки подлинности завершится с ошибкой. Либо проверьте на своем сервере (возможно, есть доступные обновления? Идите с другим сервером?), Не используйте двоеточие в своих паролях или используйте другой метод проверки подлинности.
Из любопытства, на каком сервере вы пытаетесь пройти аутентификацию?
Ответ 3
Я знаю, что это старый пост, но в случае, если другие сталкиваются с одной проблемой:
Код в new UsernamePasswordCredentials("me", "password:test"));
может разбивать строку на каждый двоеточие. Вот пример в PHP, который завершился бы неудачей:
$bits = explode(':',$auth_string);
$user = $bits[0];
$password = $bits[1];
Вот исправление:
$bits = explode(':',$auth_string);
$user = array_shift($bits);
$password = implode(':',$bits);
Ответ 4
Просто у вас была проблема с двоеточием в пароле. Похоже, что имя пользователя и пароль не будут разделены правильно.
Пример пользователь: pass: word
В моем случае поставленный пароль на PHP был просто "pass" вместо "pass: word".
Я научился избегать специальных символов, таких как: (двоеточие) и @(at) в пароле. Это немного странно, потому что одна и та же логика работала правильно, прежде чем мы обновили до php-fpm (я не знаю, относится ли эта проблема к php-fpm).