我正在尝试从支持 OAuth 1.0 且无需回调的站点访问用户数据。我正在使用路标库,但无法检索访问令牌,因为我尝试连接的站点不需要用户指定验证码。要从路标获取访问令牌,我似乎需要提供某种类型的验证码。
我的问题:有没有办法绕过这一步并仍然获得访问令牌?
否则,我会收到消息“授权失败(服务器回复 401)”。我已经设置/注册了我的客户。
我已经包含了我现有的代码以及有关我尝试连接到的站点的更多详细信息(http://www.stepgreen.org - 您必须创建一个帐户才能查看以下信息):
身份验证: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:
获取访问令牌...线程“主”oauth.signpost.exception.OAuthNotAuthorizedException 中的异常:授权失败(服务器回复 401)。如果使用者密钥不正确或签名不匹配,则可能会发生这种情况。在 oauth.signpost.basic.DefaultOAuthProvider.retrieveToken(DefaultOAuthProvider.java:126) 在 oauth.signpost.basic.DefaultOAuthProvider.retrieveAccessToken(DefaultOAuthProvider.java:96) 在 Test.main(Test.java:89)