根据我尝试通过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 :(得分: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
答案 1 :(得分:1)
为了获得回调,您必须对计算机有足够的控制权来运行可以从Box接收HTTP请求的侦听器进程。 Box将通过http呼叫您只到本地主机地址。您必须将https用于除localhost地址之外的任何其他回调。
Box SDK为您处理OAuth的内容。
你不应该import org.scribe.model.*;
import org.scribe.oauth.OAuthService;
您还必须将Box应用程序配置为指向您希望它呼叫的任何地址。我强烈建议使用localhost,因为这样可以在大多数计算机上运行,并且不需要您设置SSL证书。我刚刚更新了helloWorld示例的说明。希望这有点帮助。