Как аутентифицировать пользователей linkedin с помощью Java, используя писец в xPages - PullRequest
2 голосов
/ 22 марта 2012

Я пытаюсь аутентифицировать пользователей linkedin для моего сайта.Я использую Scribe для обработки аутентификации.

Я пытаюсь сделать это в два этапа.

step1 просто получает правильный URL и перенаправляет пользователя на страницу подтверждения.это работает нормально.и после того, как я подтвердил, что я перенаправлен обратно на страницу на моем сайте.

Шаг 2 - это та, с которой у меня проблема.когда открывается перенаправленная страница x, я вызываю метод step2 с помощью ключа токена и верификатора из URL.

Одна вещь, которую я не получаю, это то, действительно ли мне нужно создать службу на обоих этапах иэто то, что вызывает мои проблемы.как мне отправить запрос между двумя шагами.пожалуйста, совет, как заставить этот сценарий работать

Спасибо - Томас


import org.scribe.builder.ServiceBuilder;
import org.scribe.oauth.OAuthService;
import java.util.Scanner;
import org.scribe.builder.*;
import org.scribe.model.*;
import org.scribe.oauth.*;
import org.scribe.builder.api.*;
import javax.faces.context.*;


public class DoDance
{
      private static final String PROTECTED_RESOURCE_URL = "http://api.linkedin.com/v1/people/~/connections:(id,last-name)";

  public void step1()
  {
     try {
            OAuthService service = new ServiceBuilder()
            .provider(LinkedInApi.class)
            .apiKey("key")
            .apiSecret("secret")
            .callback("http://www.acme.com/linkedin.xsp")
            .build();

        Token requestToken = service.getRequestToken();
        String authUrl = service.getAuthorizationUrl(requestToken);

        // Redirects the user to linkedin confirmation page
        // This is working fine
        FacesContext.getCurrentInstance().getExternalContext().redirect(authUrl);

    } catch (Exception e) {
        e.printStackTrace(); 
    }
  }

  public String step2(String tok,String ver){

      // this method is called in the beforeRenderResponse in the redirected xpage
      // I get the token and verifyer in from the url parameters

    Response response = null;
    try {
          OAuthService service = new ServiceBuilder()
          .provider(LinkedInApi.class)
          .apiKey("key")
          .apiSecret("secret")
          .build();

          Token accessToken = service.getAccessToken(???,new Verifier(ver));
          OAuthRequest request = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL);
          service.signRequest(accessToken, request);
          response = request.send();

    } catch (Exception e) {
        e.printStackTrace();
    }
    return "Body = " + response.getBody();

  }


}

Ответы [ 2 ]

4 голосов
/ 22 марта 2012

Попробуйте сохранить и получить requestToken в пользовательском бине (в рамках сеанса).

public class User {

private Token requestToken;

private static String BEAN_NAME = "userBean";

public static User get() {
    FacesContext context = FacesContext.getCurrentInstance();
    return (User) context.getApplication().getVariableResolver().resolveVariable(context, BEAN_NAME);
}

public Token getRequestToken() {
    return requestToken;
}

public void setRequestToken(Token requestToken) {
    this.requestToken = requestToken;
}


}

Вам также, вероятно, потребуется изменить настройки безопасности JVM, чтобы использовать Scribe. Добавьте это в файл java.policy сервера Domino:

grant {
permission java.util.PropertyPermission
"http.keepAlive", "read, write";
};

Наконец: вам не нужно передавать токен и верификатор из события beforeRenderResponse. Их можно легко найти в функции step2, используя

XSPContext context = XSPContext.getXSPContext( FacesContext.getCurrentInstance() );
String oauth_verifier = context.getUrlParameter("oauth_verifier");
2 голосов
/ 23 марта 2012

Не пытайтесь изобретать велосипед.Социальный активатор делает именно это и многое другое.

Вот несколько ранних документов, которые я написал: http://www.openntf.org/Projects/pmt.nsf/DA2F4D351A9F15B28625792D002D1F18/%24file/SocialEnabler111006.pdf

Re "социальный активатор тесно связан с хранилищем ключей" - это на самом делебольшая выгодаЕсли вы хотите сделать больше, чем прототип, вам нужно найти решение, как и где централизованно управлять ключами приложения и пользовательскими ключами.

Вы также не хотите помещать этот танцевальный код OAuth в каждыйNSF, но используйте плагин социальной активации, который можно развернуть по всему миру.

Мы опробовали социальную поддержку с LinkedIn, и она работает.Нам просто не разрешили открыть исходный код этого образца.

...