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 経由で localhost アドレスにのみ呼び出します。localhost アドレス以外のコールバックには https を使用する必要があります。

Box SDK が OAuth を処理します。あなたは必要ないはずです

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

また、呼び出したいアドレスを指すように Box アプリケーションを構成する必要があります。ほとんどのコンピューターで機能し、SSL 証明書を設定する必要がないため、最初に localhost を使用することを強くお勧めします。helloWorldの例の手順を更新しました。うまくいけば、それは少し役立ちます。

于 2013-06-22T20:17:24.713 に答える