Базовая аутентификация по URL в рестлете - PullRequest
1 голос
/ 17 июня 2010

Я использовал механизм Restlets "ChallengeResponse" для аутентификации пользователей на стороне сервера.

ChallengeResponse challengeResponse = getRequest().getChallengeResponse();
if( challengeResponse == null ){
     throw new RuntimeException("not authenticated");
}
String login = challengeResponse.getIdentifier();
String password = new String(challengeResponse.getSecret());

Насколько я понимаю, "ChallengeResponse" требует, чтобы имя пользователя и пароль были введены в заголовки.Однако клиент должен поместить учетные данные в URL следующим образом:

https://username:password@www.myserver.com/my_secure_document

Когда я посмотрел на то, что было отправлено, похоже, что пароль кодируется в Base64

Клиентвнешний веб-сервис (Twilio), который отправляет информацию об аутентификации через URL вместо заголовков ....

Каков правильный способ аутентификации таким способом с использованием Restlet?

1 Ответ

2 голосов
/ 22 июня 2010

Фрагмент кода, который вы поместили выше, выглядит так, как будто он находится на стороне сервера.

Я предполагаю, что ваш вопрос касается использования этого URI от клиента (и я также предполагаю, что ваш клиент использует Restlet). Вы можете создать ссылку и извлечь имя пользователя и пароль, используя Reference.getUserInfo () следующим образом:

Reference ref = new Reference("https://username:password@www.myserver.com/my_secure_document");
String[] userinfo = ref.getUserInfo().split(":"); // "username:password"
String username = userinfo[0];
String password = userinfo[1];
ClientResource clientRes = new ClientResource(ref);
clientRes.setChallengeResponse(ChallengeScheme.HTTP_BASIC, username, password);
clientRes.get();

(Конечно, перед разделением вам нужно проверить, не содержит ли информация пользователя значение NULL).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...