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.

Другие вопросы по тегам