OAuth 1.0, javascript и межсерверная аутентификация
Мы пытаемся интегрировать функцию "войти через твиттер" в наше приложение, и для этого мы используем javascript ( hello.js).
К сожалению, в твиттере используется oauth 1.0, поэтому у нас не может быть только решения javascript, но нам нужно реализовать межсерверную связь для подписания запроса. Автор hello.js предоставил реализацию auth-server для демонстрационных целей на основе node.js.
В нашем приложении для серверной части мы используем Java, и мне было интересно, существует ли решение Java для этой цели. Могу ли я использовать, например, указатель или аналогичный для выполнения работы сервера авторизации?
[ОБНОВЛЕНИЕ] Я попытался установить прокси, используемый hello.js, на мой сервлет (поэтому вместо herokuap теперь я использую сервлет localhost с oauth в buildpath).
Этот сервлет делает следующее:
OAuthConsumer consumer = new DefaultOAuthConsumer(
"xxxx",
"yyyyyyyyyyy");
OAuthProvider provider = new DefaultOAuthProvider(
"https://api.twitter.com/oauth/request_token",
"https://api.twitter.com/oauth/access_token",
"https://api.twitter.com/oauth/authorize");
System.out.println("Fetching request token from Twitter...");
// we do not support callbacks, thus pass OOB
String authUrl = provider.retrieveRequestToken(consumer, "http://localhost:8080/oauth1/twitter/response_server");
URL url = new URL(authUrl);
HttpURLConnection req = (HttpURLConnection) url.openConnection();
req.setRequestMethod("GET");
req.connect();
BufferedReader rd = new BufferedReader(new InputStreamReader(req.getInputStream()));
StringBuilder d = new StringBuilder();
String line = null;
while ((line = rd.readLine()) != null){
d.append(line + '\n');
}
System.out.println(d);
PrintWriter out = response.getWriter();
out.println(d);
и он печатает страницу входа в твиттер во всплывающем окне hello.js. Таким образом я получил некоторую ошибку кодирования, но она вполне работает.
В любом случае URL обратного вызова сопоставляется с другим сервлетом, где я должен просто "подписать" запрос, но мне кажется, что я что-то упускаю, потому что иногда я получаю сообщение об ошибке "Сервер понимает запрос, но он по-прежнему отклоняет его", но если я закрываю весь браузер Окно это работает.
Однако ответный сервлет похож на этот
OAuthConsumer consumer = new AbstractOAuthConsumer(
"xxxxx",
"yyyyyyyyyyy"){
@Override
protected HttpRequest wrap(Object arg0) {
return (HttpRequest)arg0;
}
};
consumer.sign(request);
Но этот код не работает, потому что я не знаю, как подписать запрос Tomcat. На домашней странице oauth объясняется, как подписать общий http-запрос причала и apache, но не tomcat. Однако правильный ли это мой подход?
1 ответ
Пожалуйста, ознакомьтесь со спецификацией node-oauth-shim, которая используется моим //auth-сервером и которую поставляет HelloJS.