2013-06-21 8 views
0

В соответствии с сообщением об ошибке, которое я получал, когда пытался получить токен запроса проверки подлинности через service.getRequestToken(), мне фактически не разрешено делать это таким образом, и вместо этого он должен использовать service.getAuthorizationUrl() для перенаправления пользователь. Проблема в том, что я не знаю, что делать после этого. У меня нет маркера запроса, чтобы дать service.getAccessToken(), и я даже не знаю, как получить соответствующий верификатор.Как получить аутентифицированный токен после перенаправления пользователя

  • Как получить необходимый верификатор, который мне нужен, чтобы получить токен доступа?
  • Как получить нужный токен запроса, так как я не могу использовать service.getRequestToken()?

Вот код, который я до сих пор:

import java.awt.Desktop; 
import java.net.URI; 
import org.scribe.model.*; 
import org.scribe.oauth.OAuthService; 

public class HelloBox{ 

    public static void main(String[] args) throws Exception{ 

     BoxOAuth2API box = new BoxOAuth2API(); 

     OAuthConfig config = new OAuthConfig(
       /* [...] */,    //client id 
       /* [...] */,    //client secret 
       "https://localhost:4000", //callback 
       null, null,    //signature type, scope 
       System.out    //debug stream 
      ); 

     OAuthService service = box.createService(config); 

     Desktop.getDesktop().browse(URI.create(service.getAuthorizationUrl(null))); 

     // === What do I do now? === 

     Verifier v = new Verifier(/* ??? */); 

     Token accessToken = service.getAccessToken(null, v); 

    } 

} 

Я нашел этот BoxOAuth2API класс онлайн. Если проблема связана с этим, где работает класс API?

public class BoxOAuth2API extends DefaultApi20 { 
    //http://developers.box.com/docs/ 
    private static final String AUTHORIZE_URL = "https://www.box.com/api/oauth2/authorize?client_id=%s&redirect_uri=%s&response_type=code"; 
    private static final String SCOPED_AUTHORIZE_URL = AUTHORIZE_URL + "&scope=%s"; 

    @Override 
    public Verb getAccessTokenVerb() { 
     return Verb.POST; 
    } 

    @Override 
    public AccessTokenExtractor getAccessTokenExtractor() { 
     return new JsonTokenExtractor(); 
    } 

    @Override 
    public String getAccessTokenEndpoint() { 
     return "https://www.box.com/api/oauth2/token?grant_type=authorization_code"; 
    } 

    @Override 
    public String getAuthorizationUrl(OAuthConfig config) { 
     // Append scope if present 
     if (config.hasScope()) { 
      return String.format(SCOPED_AUTHORIZE_URL, config.getApiKey(), 
        OAuthEncoder.encode(config.getCallback()), 
        OAuthEncoder.encode(config.getScope())); 
     } else { 
      return String.format(AUTHORIZE_URL, config.getApiKey(), 
        OAuthEncoder.encode(config.getCallback())); 
     } 
    } 
} 
+0

Вы проверили [Пошаговое руководство Box OAuth2] (http://developers.box.com/docs/#oauth-2)? Он показывает вам порядок операций с примерами HTTP-запросов для каждого. –

+0

Я взглянул на него, но я не понимаю, как получить данные, которые должны быть возвращены в обратном вызове. – AJMansfield

ответ

1

Чтобы для вас получите обратный вызов, у вас должен быть достаточный контроль над вашей машиной, чтобы запустить процесс прослушивания, который может получать HTTP-запросы из Box. Ящик будет вызывать вас через http только на адрес localhost. Вы должны использовать https для любого другого обратного вызова, чем адреса localhost.

Box SDK обрабатывает информацию OAuth для вас. Вы не должны нужен

import org.scribe.model.*; 
import org.scribe.oauth.OAuthService; 

Вы также должны настроить приложение Box, чтобы указать на то, что адрес, который вы хотите, чтобы взывать к вам. Я настоятельно рекомендую localhost для начала работы, так как это будет работать только на большинстве компьютеров и не требует установки SSL-сертификатов. Я просто обновил инструкции для примера helloWorld. Надеюсь, это поможет немного.

+0

ОК, спасибо, Я проведу его в понедельник, когда вернусь в офис. – AJMansfield

1

Коробка имеет java sdk сейчас. Это на самом деле не обеспечивают интерфейс OAuth потока, но вот пример кода, как вы можете создать OAuth и получить клиента окно с проверкой подлинности: https://github.com/box/box-java-sdk-v2/wiki/HelloWorld

Для SDK, пожалуйста, проверьте здесь: https://github.com/box/box-java-sdk-v2

+0

Я действительно попробовал это с этой библиотекой; У меня была такая же проблема, как и в том, что я обсуждал в своем вопросе по адресу http://stackoverflow.com/questions/17221756/how-do-i-get-text-data-from-oauth-callback – AJMansfield