我正在尝试从没有回调的OAuth 1.0支持的站点访问用户数据。我正在使用路标库,但我无法检索访问令牌,因为我尝试连接的站点不需要用户指定验证码。要从路标获取访问令牌,我似乎需要提供某种类型的验证码。
我的问题:有没有办法绕过这一步并仍然获得访问令牌?
否则,我收到消息“授权失败(服务器回复401)”。我已经设置/注册了我的客户。
我已经包含了我现有的代码以及有关我正在尝试连接的网站的更多详细信息(http://www.stepgreen.org - 您必须创建一个帐户才能查看以下信息):< / p>
身份验证:OAuth
StepGreens首选的身份验证方法是OAuth。有关OAuth的更多信息,请访问OAuth.net。我们目前支持没有回调的OAuth 1.0。
您需要一些其他信息来配置您选择的OAuth库:
请求请求令牌:/ oauth / request_token 请求访问令牌:/ oauth / access_token 授权URL:/ oauth / authorize 要在客户端使用OAuth,请记住设置客户端。
public static void main(String[] args) throws Exception{
OAuthConsumer consumer = new DefaultOAuthConsumer( CONSUMER_KEY, CONSUMER_SECRET,
SignatureMethod.HMAC_SHA1);
OAuthProvider provider = new DefaultOAuthProvider(consumer, REQUEST_TOKEN_URL,
ACCESS_TOKEN_URL, AUTHORIZE_URL);
System.out.println("Fetching request token...");
String authUrl = provider.retrieveRequestToken(OAuth.OUT_OF_BAND);
System.out.println("Request token: " + consumer.getToken());
System.out.println("Token secret: " + consumer.getTokenSecret());
System.out.println("Now visit:\n" + authUrl + "\n... and grant this app authorization");
System.out.println("Enter the verification code and hit ENTER when you're done:");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String verificationCode = br.readLine();
System.out.println("Fetching access token...");
String verificationCode = consumer.getToken();
provider.retrieveAccessToken(verificationCode.trim());
System.out.println("Access token: " + consumer.getToken());
System.out.println("Token secret: " + consumer.getTokenSecret());
URL url = new URL("http://www.stepgreen.org/api/v1/users/username/ted5000s.xml");
HttpURLConnection request = (HttpURLConnection) url.openConnection();
consumer.sign(request);
InputStream stream = (InputStream)request.getContent();
System.out.println("Result = " + convertStreamToString(stream));
System.out.println("Sending request...");
request.connect();
System.out.println("Response code: " + request.getResponseCode() + " " +
request.getResponseMessage());
}
响应:
获取请求令牌......
请求令牌:出于隐私原因隐藏
令牌密码:出于隐私原因隐藏
现在访问: http://www.stepgreen.org/oauth/authorize?oauth_token=hidden ...并授予此应用程序授权 输入验证码并在完成后点击ENTER:
获取访问令牌... 线程“main”中的异常oauth.signpost.exception.OAuthNotAuthorizedException:授权失败(服务器回复401)。如果使用者密钥不正确或签名不匹配,则会发生这种情况。 at oauth.signpost.basic.DefaultOAuthProvider.retrieveToken(DefaultOAuthProvider.java:126) at oauth.signpost.basic.DefaultOAuthProvider.retrieveAccessToken(DefaultOAuthProvider.java:96) 在Test.main(Test.java:89)