推特。验证_凭据。 OAuth API。错误“无法验证您的身份。” include_email=true

问题描述 投票:0回答:2

如果我包含参数“Include_email=true”,我会收到错误“无法验证您的身份。”

这里是代码。请帮忙。

public final static String VERIFY_CREDENTIALS_URL ="https://api.twitter.com/1.1/account/verify_credentials.json";

    public final static String AUTHORIZATION_VERIFY_CREDENTIALS = "OAuth " +
            "oauth_consumer_key=\"{key}\", " +
            "oauth_signature_method=\"" + SIGNATURE_METHOD + "\", " +
            "oauth_timestamp=\"{ts}\", " +
            "oauth_nonce=\"{nonce}\", " +
            "oauth_version=\"1.0\", " +
            "oauth_signature=\"{signature}\", " +
            "oauth_token=\"{token}\"";

    public static TwitterVerifyCredentials getVerifyCredentials(String appKey, String appSecret, TwitterAccessToken accessToken) throws GeneralSecurityException, IOException {
        String ts = "" + TimeUtility.now().getTime()/1000;
        String oauth_nonce = UUID.randomUUID().toString().replaceAll("-", "");
        String parameters = "oauth_consumer_key=" + appKey + "&oauth_nonce=" + oauth_nonce + "&oauth_signature_method=" + SIGNATURE_METHOD + "&oauth_timestamp=" + ts + "&oauth_token=" + encode(accessToken.getToken()) + "&oauth_version=1.0";
        String signature = "GET&" + encode(VERIFY_CREDENTIALS_URL) + "&" + encode(parameters);
        System.out.println(signature);

        String result = TwitterOAuth.AUTHORIZATION_VERIFY_CREDENTIALS;
        result = StringUtils.replace(result, "{nonce}", oauth_nonce);
        result = StringUtils.replace(result, "{ts}", "" + ts);
        result = StringUtils.replace(result, "{key}", appKey);
        result = StringUtils.replace(result, "{signature}", encode(computeSignature(signature, appSecret + "&" + encode(accessToken.getTokenSecret()))));
        result = StringUtils.replace(result, "{token}", encode(accessToken.getToken()));

        HashMap<String, String> headers = new HashMap<>();
        headers.put("Authorization", result);

        String s = SiteFunctions.urlGet(VERIFY_CREDENTIALS_URL+"?include_email=true", headers);
        System.out.println(s);
        return new TwitterVerifyCredentials(); // while testing
    }

如果我删除“?include_email = true”一切都可以!

java api twitter oauth
2个回答
2
投票
程序中的

VERIFY_CREDENTIALS_URL
应添加
?include_email=true
。如果您想从 Twitter OAuth api 获取电子邮件,签名中的 url 应该有
?include_email=true


0
投票

{METHOD}&{URL_WITHOUT_QUERY_PARAMS}&{OTHER_PARAMS}

创建签名时,GET 查询参数不能是

{URL_WITHOUT_QUERY_PARAMS}
的一部分,而是作为
{OTHER_PARAMS}
的一部分。请注意,
{OTHER_PARAMS}
必须按字母顺序排序。

https://oauth.net/core/1.0a/

附录 A.5.1。生成签名基字符串

要生成签名,首先需要生成签名基字符串。该请求包含以下参数(不包括 oauth_signature),这些参数被排序并连接成规范化字符串:

oauth_consumer_key: dpf43f3p2l4k3l03 oauth_令牌: nnch734d00sl2jdk oauth_signature_method: HMAC-SHA1 oauth_时间戳: 1191242096 oauth_nonce: kllo9940pd9333jh oauth_版本: 1.0 文件: 假期.jpg 尺寸: 原来的 以下输入用于生成签名基字符串:

1.)

获取

2.)

http://photos.example.net/photos

3.) file=vacation.jpg&oauth_consumer_key=dpf43f3p2l4k3l03&oauth_nonce=kllo9940pd9333jh&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1191242096&oauth_token=nnch734d00sl2jdk&oauth _版本=1.0&大小=原始

签名基串是:

GET&http%3A%2F%2Fphotos.example.net%2Fphotos&file%3Dvacation.jpg%26oauth_consumer_key%3Ddpf43f3p2l4k3l03%26oauth_nonce%3Dkllo9940pd9333jh%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1191242096%26oauth_token%3Dnnch734d00sl2jdk%26oauth_version%3D1.0%26size%3Doriginal

© www.soinside.com 2019 - 2024. All rights reserved.