gpt4 book ai didi

java - Yahoo Oauth 不一致 "Invalid Signature"

转载 作者:行者123 更新时间:2023-11-29 08:56:12 24 4
gpt4 key购买 nike

H!我现在很难使用 Yahoo Oauth。

所以这就是问题所在,我使用的是 scribe 3.1.5 并遵循了 Yahoo 的文档(显然他们使用的是 Oauth1.0),我已经能够获得请求 token ,然后与 validator 交易访问 token 。当我尝试从 URL http://social.yahooapis.com/v1/me/guid?format=json 获取用户的 GUID 时出现问题使用访问 token 。

现在,有趣的是,yahoo 有时会给我返回 GUID,有时会给我一个“无效签名”错误。有时我连续收到 5 个无效签名,有时我连续收到 15 个成功调用,大​​多数时候是 40% 无效签名和 60 % 成功。更奇怪的是,有时我在获取 GUID 时会成功,但是当我尝试使用相同的访问 token 和 GUID 立即获取用户的个人资料时,它给了我一个无效的签名.. .(wtf)

所以这是我使用的代码:

重定向用户:

    Token requestToken = yahooService.getRequestToken();
getSession().setAttribute("yahooRequestToken", requestToken);
String authenticationUrl = yahooService.getAuthorizationUrl(requestToken);
redirect(authenticationUrl);

获取回调:

@GET @Path("/oauthcallback/yahoo")
public Response yahooCallback(@QueryParam("oauth_token") String oAuthToken, @QueryParam("oauth_verifier") String oAuthVerifier) {

Token requestToken = (Token)getSession().getAttribute("yahooRequestToken");
Token accessToken = yahooService.getAccessToken(requestToken, oAuthVerifier);


UserProfile user = userService.findUserById(getUserId());
try{
//TODO occasioanlly yahoo returns invalid_signature, this is inconsistent and I have no idea why

String guid = yahooService.getGuid(accessToken);
String email = yahooService.getUserEmail(guid, accessToken);

.....

YahooService::获取访问 token :

[the service object is protected final OAuthService service; in parent class]

@Override
public Token getAccessToken(Token requestToken, String oAuthVerifier) {
Verifier verifier = new Verifier(oAuthVerifier);
return service.getAccessToken(requestToken, verifier);
}

YahooService::获取 GUID:

@Override
public String getGuid(Token accessToken){
OAuthRequest requestA = new OAuthRequest(Verb.GET, GET_YAHOO);
service.signRequest(accessToken, requestA);
Response responseA = requestA.send();

JsonParser parser = new JsonParser();
//sometimes the response body is a invalid signature error message
JsonObject json = (JsonObject)parser.parse(responseA.getBody());

return json.getAsJsonObject("guid").get("value").getAsString();
}

YahooService::获取用户邮箱:

@Override
public String getUserEmail(String guid, Token accessToken) {
String profileCallUrl = GET_YAHOO_PROFILE.replaceAll("GUID", guid);
OAuthRequest requestB = new OAuthRequest(Verb.GET, profileCallUrl);
service.signRequest(accessToken, requestB);
requestB.addHeader("realm", "yahooapis.com");
Response responseB = requestB.send();

JsonParser parser = new JsonParser();
//sometimes the response body is a invalid signature error message
JsonObject jsonProfile = (JsonObject)parser.parse(responseB.getBody());
...processing code, error free

}

我知道 Maven 发行版中 Scribe 3.1.5 中的 YahooAPI 类已有 2 年历史,但我怀疑它会导致这种不一致的行为。 Scribe 对 Google 和 Live oauth 的内置支持基本上没用,不幸的是,与 Google 或 Hotmail 不同,它们都有很棒的文档,所以我基本上可以自己弄清楚所有内容,Yahoo 的文档停止获取访问 token ,我找不到有用的解释为什么我的访问 token 有时会得到无效的签名

求助!提前致谢

最佳答案

关于java - Yahoo Oauth 不一致 "Invalid Signature",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20201615/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com