所以我构建了一个应用程序,允许用户登录并将他们的Flickr帐户链接到我的应用程序,它可以正常登录并将AccessToken存储在我的数据库中,以便用户避免每次登录时链接Flickr。 我有这段代码:
OAuthService service = new ServiceBuilder()
.provider(FlickrApi.class)
.apiKey("apiKey")
.apiSecret("apiSecret")
.build();
Token flickReq = service.getRequestToken();
String authUrl = service.getAuthorizationUrl(flickReq);
try{
MSConnection msc = new MSConnection();
Token accessToken = msc.getToken(userId_acc); // This gets AccessToken from database.
OAuthRequest req = new OAuthRequest(Verb.POST, "https://api.flickr.com/services/rest/");
req.addQuerystringParameter("method", "flickr.test.login");
service.signRequest(accessToken, req);
Response resp = req.send();
System.out.println(resp.getBody());
作为回应我得到: oauth_problem = signature_invalid
我做错了什么?
答案 0 :(得分:1)
解决了问题,事实证明:当您使用AccessToken生成令牌时,您存储并且秘密 - 秘密不是API秘密,它是您获得的直接秘密:
Token accessToken = service.getAccessToken(flickReq, v); // Original accessToken you get from Flickr and users entered code.
String tokenSecret = accessToken.getSecret();
因此,您为用户存储这两个变量,然后每当您想要验证用户Flickr详细信息而无需再次授权并输入代码时 - 您只需使用:accessToken + tokenSecret
Token tok = new Token(getToken(userId_acc), getSecret(userId_acc));
然后你只需签署请求并将其发送出去。
OAuthRequest req = new OAuthRequest(Verb.POST, "https://api.flickr.com/services/rest/");
req.addQuerystringParameter("method", "flickr.test.login");
service.signRequest(tok, req);
Response resp = req.send();
就是这样,希望这为遇到这个问题的人节省了一些时间,显然Flickr API文档并没有真正解释Java方面的问题。