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()));
        }
    }
}
4

2 回答 2

1

Box 现在有一个 java sdk。它并没有真正提供 OAuth 流 UI,但这里是如何创建 OAuth 并获得框客户端身份验证的示例代码:https ://github.com/box/box-java-sdk-v2/wiki/HelloWorld

对于 sdk,请在此处查看:https ://github.com/box/box-java-sdk-v2

于 2013-06-21T22:23:39.917 回答
1

为了让你获得回调,你必须对你的机器有足够的控制权来运行一个可以接收来自 Box 的 HTTP 请求的侦听器进程。Box 将通过 http 仅向本地主机地址呼叫您。您必须将 https 用于除 localhost 地址之外的任何其他回调。

Box SDK 为您处理 OAuth 内容。你不应该需要

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

您还必须配置您的 Box 应用程序以指向您希望它向您调用的任何地址。我强烈推荐 localhost 开始使用,因为它只适用于大多数计算机,并且不需要您设置 SSL 证书。我刚刚更新了helloWorld示例的说明。希望这会有所帮助。

于 2013-06-22T20:17:24.713 回答