Scribe + Xing => 无效的 OAuth 签名
Scribe + Xing => Invalid OAuth signature
我正在尝试将 scribe 与 XING 一起使用,但我总是得到以下答案:
Can't extract token and secret from this: '{"message":"Invalid OAuth signature","error_name":"INVALID_OAUTH_SIGNATURE"}'
我有一个有效的登录过程,取回一个 oauth_token
和一个 oauth_verifier
并尝试用 PlainText
签名更改默认选择的 HMACSha1
签名,但我总是会得到上述结果...
关于为什么会发生这种情况有什么想法吗?
使用抄写员的默认 DefaultApi10a
和 XingApi
在上述步骤中总是失败...
编辑 - 代码
// Creating the service
// callback is needed to stop redirecting in the webview
OAuthService service = new ServiceBuilder()
.provider(XingApi.class)
.apiKey(apiKey)
.apiSecret(apiSecret)
.callback("http://www.xing.com")
.build();
第一步:获取请求令牌+授权url
RequestToken requestToken = service.getRequestToken();
String authUrl = service.getAuthorizationUrl(requestToken );
第 2 步:在 webview 中加载身份验证 url + 检查重定向 url 并根据回调取消重定向
例如,重定向 url 如下所示:http://www.xing.com?oauth_token=a2191ab84c9e0f85cf0c&oauth_verifier=4978
第 3 步:从返回的 url
中提取 oauth_token + oauth_verifier
String oauthToken = ...; // a2191ab84c9e0f85cf0c in the example
String oauthVerifier = ...; // 4978 in the example
第 4 步:获取访问令牌 => 这失败了
Token requestToken = new Token(oauthToken, oauthVerifier); // reusing the request token from above results in invalid request token answer from xing!
Verifier v = new Verifier(oauthVerifier);
Token accessToken = service.getAccessToken(requestToken, v);
删除:
Token requestToken = new Token(oauthToken, oauthVerifier); // reusing the request token from above results in invalid request token answer from xing!
第 4 步的行。
您必须保留请求令牌才能使用它和来自 Xing 的验证器(4 位 PIN)检索访问令牌。
编辑 - 添加代码:
OAuth10aService service = new ServiceBuilder()
.apiKey("44a4f9c1a9daa88f4da2")
.apiSecret("2fc8ca373dab772acc4de7ce22718f8fced6919c")
.callback("https://redirect.example.com")
.build(XingApi.instance());
final Token requestToken = service.getRequestToken();
System.out.println(service.getAuthorizationUrl(requestToken));
System.out.println("Paste the verifier here");
System.out.print(">>");
Scanner in = new Scanner(System.in);
Verifier verifier = new Verifier(in.nextLine());
System.out.println();
in.close();
// Trade the Request Token and Verfier for the Access Token
Token accessToken = service.getAccessToken(requestToken, verifier);
System.out.println("Got the Access Token! " + accessToken);
我正在尝试将 scribe 与 XING 一起使用,但我总是得到以下答案:
Can't extract token and secret from this: '{"message":"Invalid OAuth signature","error_name":"INVALID_OAUTH_SIGNATURE"}'
我有一个有效的登录过程,取回一个 oauth_token
和一个 oauth_verifier
并尝试用 PlainText
签名更改默认选择的 HMACSha1
签名,但我总是会得到上述结果...
关于为什么会发生这种情况有什么想法吗?
使用抄写员的默认 DefaultApi10a
和 XingApi
在上述步骤中总是失败...
编辑 - 代码
// Creating the service
// callback is needed to stop redirecting in the webview
OAuthService service = new ServiceBuilder()
.provider(XingApi.class)
.apiKey(apiKey)
.apiSecret(apiSecret)
.callback("http://www.xing.com")
.build();
第一步:获取请求令牌+授权url
RequestToken requestToken = service.getRequestToken();
String authUrl = service.getAuthorizationUrl(requestToken );
第 2 步:在 webview 中加载身份验证 url + 检查重定向 url 并根据回调取消重定向
例如,重定向 url 如下所示:http://www.xing.com?oauth_token=a2191ab84c9e0f85cf0c&oauth_verifier=4978
第 3 步:从返回的 url
中提取 oauth_token + oauth_verifierString oauthToken = ...; // a2191ab84c9e0f85cf0c in the example
String oauthVerifier = ...; // 4978 in the example
第 4 步:获取访问令牌 => 这失败了
Token requestToken = new Token(oauthToken, oauthVerifier); // reusing the request token from above results in invalid request token answer from xing!
Verifier v = new Verifier(oauthVerifier);
Token accessToken = service.getAccessToken(requestToken, v);
删除:
Token requestToken = new Token(oauthToken, oauthVerifier); // reusing the request token from above results in invalid request token answer from xing!
第 4 步的行。
您必须保留请求令牌才能使用它和来自 Xing 的验证器(4 位 PIN)检索访问令牌。
编辑 - 添加代码:
OAuth10aService service = new ServiceBuilder()
.apiKey("44a4f9c1a9daa88f4da2")
.apiSecret("2fc8ca373dab772acc4de7ce22718f8fced6919c")
.callback("https://redirect.example.com")
.build(XingApi.instance());
final Token requestToken = service.getRequestToken();
System.out.println(service.getAuthorizationUrl(requestToken));
System.out.println("Paste the verifier here");
System.out.print(">>");
Scanner in = new Scanner(System.in);
Verifier verifier = new Verifier(in.nextLine());
System.out.println();
in.close();
// Trade the Request Token and Verfier for the Access Token
Token accessToken = service.getAccessToken(requestToken, verifier);
System.out.println("Got the Access Token! " + accessToken);