我正在尝试为我的 Android 应用程序构建 oauth 身份验证。我使用 ZF2 和 PECL OAuthProvider 构建了服务器端,但现在我正在尝试构建客户端。
我尝试了在 Request Token 请求中失败的路标,所以我切换到 Scribe,但这并没有更好:
当我尝试获取请求令牌时,出现异常。这是我的跟踪(在调试模式下)
04-20 23:03:40.768: I/System.out(10677): obtaining request token from http://192.168.1.198:88/oauth/requesttoken
04-20 23:03:40.778: I/REQUEST(10677): http://192.168.1.198:88/oauth/requesttoken
04-20 23:03:40.778: I/System.out(10677): setting oauth_callback to oob
04-20 23:03:40.778: I/System.out(10677): generating signature...
04-20 23:03:40.838: I/System.out(10677): using base64 encoder: CommonsCodec
04-20 23:03:40.958: I/System.out(10677): base string is: POST&http%3A%2F%2F192.168.1.198%3A88%2Foauth%2Frequesttoken&oauth_callback%3Doob%26oauth_consumer_key%3D0afc84167f8f5c0134d88599c7dbdabf6e05de12%26oauth_nonce%3D345688132%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1366491820%26oauth_version%3D1.0
04-20 23:03:40.958: I/System.out(10677): signature is: O2gik5ufQISAluRS5sDyZcUy2SQ=
04-20 23:03:40.968: I/System.out(10677): appended additional OAuth parameters: { oauth_callback -> oob , oauth_signature -> O2gik5ufQISAluRS5sDyZcUy2SQ=
04-20 23:03:40.968: I/System.out(10677): , oauth_version -> 1.0 , oauth_nonce -> 345688132 , oauth_signature_method -> HMAC-SHA1 , oauth_consumer_key -> 0afc84167f8f5c0134d88599c7dbdabf6e05de12 , oauth_timestamp -> 1366491820 }
04-20 23:03:40.968: I/System.out(10677): using Http Header signature
04-20 23:03:40.978: I/System.out(10677): sending request...
04-20 23:03:41.018: W/System.err(10677): org.scribe.exceptions.OAuthConnectionException: There was a problem while creating a connection to the remote service.
04-20 23:03:41.028: W/System.err(10677): at org.scribe.model.Request.send(Request.java:69)
04-20 23:03:41.028: W/System.err(10677): at org.scribe.oauth.OAuth10aServiceImpl.getRequestToken(OAuth10aServiceImpl.java:59)
这是代码(尽可能简单):
OAuthService service = new ServiceBuilder()
.provider(OAuthApi.class)
.apiKey(Const.CONSUMER_KEY)
.apiSecret(Const.CONSUMER_SECRET)
.debug()
.build();
Token requestToken = service.getRequestToken();
Log.i("Token", requestToken.getToken());
我的 OAuthApi 基于示例,也很简单:
public class OAuthApi extends DefaultApi10a {
@Override
public String getRequestTokenEndpoint()
{
Log.i("REQUEST ", Const.SERV+"oauth/requesttoken");
return Const.SERV+"oauth/requesttoken";
}
@Override
public String getAccessTokenEndpoint()
{
return Const.SERV+"oauth/accesstoken";
}
@Override
public String getAuthorizationUrl(Token requestToken)
{
return String.format(Const.SERV+"oauth/authorize?token=%s", requestToken.getToken());
}
}
我究竟做错了什么 ?Scribe 在 Android 上是否有限制?
谢谢。