2012-03-22 2 views
2

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

Я пытаюсь сделать это в двухэтапном процессе.

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

Шаг 2 - это проблема, с которой я столкнулся. когда открывается перенаправленная xpage, я вызываю метод step2, используя ключ токена и подтверждения от url.

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

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


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

Вы взглянули на плагин социального enabler? – jjtbsomhorst

+0

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

+0

Если вам нужно передать requestToken на шаг 2, вы можете создать userBean (session scoped) и сохранить его там. –

ответ

4

Попробуйте хранения и извлечения 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 домина сервера:

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

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

XSPContext context = XSPContext.getXSPContext(FacesContext.getCurrentInstance()); 
String oauth_verifier = context.getUrlParameter("oauth_verifier"); 
+0

приятно, отлично сработало –

2

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

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

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

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

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

+1

Хорошо, это ценная информация, но вряд ли ответ на этот вопрос. Для записи. Я не изобретал велосипед. Scribe легко понять, и очень маленький код необходим, и я полностью контролирую его. –

+0

Томас, используя библиотеку OAuth, не является проблемой. Управление ключами и использование одной и той же инфраструктуры для различных приложений. Я понимаю, что это не ответит, как использовать Scribe, но я рекомендую использовать социальный помощник. –

+0

Настоящая жалость, что вы не можете освободить код LinkedIn. Я также посмотрел на социальный помощник и согласен с Томасом в том, что Scribe легче начать: это, вероятно, из-за простых образцов, которые они предоставляют. –