Пароль с двоеточием не имеет базового права?

Я использую 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).