В соответствии с сообщением об ошибке, которое я получал, когда пытался получить токен запроса проверки подлинности через 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()));
}
}
}
Вы проверили [Пошаговое руководство Box OAuth2] (http://developers.box.com/docs/#oauth-2)? Он показывает вам порядок операций с примерами HTTP-запросов для каждого. –
Я взглянул на него, но я не понимаю, как получить данные, которые должны быть возвращены в обратном вызове. – AJMansfield