OAuth 1.0 Неверная подпись для FatSecret API - PullRequest
0 голосов
/ 06 февраля 2019

Я пытаюсь использовать OAuth 1.0 для FatSecret API.

Я пытался сгенерировать oauth_signature, но он не работает.

Я реализую его на python.Я объединил много кода из StackOverflow, но все еще не работает.

Вот моя библиотека, которую я использую:

import requests
import time
from urllib import quote_plus as rawurlencode
import string
import random
import operator

Это id_generator для nonce:

def id_generator(size=6, chars=string.ascii_uppercase + string.digits):
    return ''.join(random.choice(chars) for _ in range(size))

Thisэто генерировать подпись:

def _hmac_sha1(input_str, input_key):
    from hashlib import sha1
    import hmac

    key = b""+input_key+b"&"

    raw = b""+input_str

    hashed = hmac.new(key, raw, sha1)

    return hashed.digest().encode("base64").rstrip('\n')

И вот код:

key = 'xxxxx'
secret = 'xxxxxx'
oauth_signature_method = "HMAC-SHA1"
oauth_timestamp = str(int(time.time()))
oauth_nonce = id_generator(8)
oauth_version = "1.0"

url = 'http://platform.fatsecret.com/rest/server.api?method=food.get&food_id=1678'

params = {
'oauth_consumer_key': key,
'oauth_nonce': oauth_nonce,
'oauth_signature_method': oauth_signature_method,
'oauth_timestamp': oauth_timestamp,
'oauth_token': '',
'oauth_version': oauth_version
}

baseString = "POST&" + rawurlencode(url) + "&"

sorted_paramDict = sorted(params.items(), key=operator.itemgetter(0))

paramStr = ''

for kv in sorted_paramDict:
    paramStr = paramStr + kv[0] + "=" + kv[1] + "&"

paramStr = paramStr[:-1]

baseString = baseString + rawurlencode(paramStr)

oauth_signature = _hmac_sha1(baseString, key)

paramsSIGN = {
'oauth_consumer_key': key,
'oauth_signature_method': oauth_signature_method,
'oauth_timestamp': oauth_timestamp,
'oauth_nonce': oauth_nonce,
'oauth_version': oauth_version,
'oauth_signature': oauth_signature
}

r = requests.post(url, params=paramsSIGN)
print r.content

И результат:

<?xml version="1.0" encoding="utf-8" ?>
<error xmlns="http://platform.fatsecret.com/api/1.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://platform.fatsecret.com/api/1.0/ http://platform.fatsecret.com/api/1.0/fatsecret.xsd">
        <code>8</code>
        <message>Invalid signature: oauth_signature 'PyhuSZB9iIIqxzuT/zhH37EGxkc='</message>
</error>

Я не знаю, почему этоне работает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...