Java: Flickr OAuth Signature Invalid



所以我构建了一个应用程序,允许用户登录并将他们的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

我做错了什么?

事实证明,解决了问题:当您使用您存储的访问令牌生成令牌时,秘密 - 秘密不是 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方面。

相关内容

最新更新