Python Facebook签名请求解码不正确的填充
我正在尝试解码一个facebook签名的请求,以便向未经授权的用户提供登录表单。我的代码如下:Python Facebook签名请求解码不正确的填充,python,django,facebook,Python,Django,Facebook,我正在尝试解码一个facebook签名的请求,以便向未经授权的用户提供登录表单。我的代码如下: def parse_signed_request(sr): encoded_sig, payload = sr.split('.', 2) data = json.loads(base64.b64decode( payload.replace('-_', '+/') )) if not data['algorithm'].upper() == 'HMAC-SHA256':
def parse_signed_request(sr):
encoded_sig, payload = sr.split('.', 2)
data = json.loads(base64.b64decode( payload.replace('-_', '+/') ))
if not data['algorithm'].upper() == 'HMAC-SHA256':
raise ValueError('unknown algorithm {0}'.format(data['algorithm']))
return None
h = hmac.new(FB_APP_SECRET, digestmod=hashlib.sha256)
h.update(payload)
expected_sig = urlsafe_b64encode(h.digest()).replace('=', '')
if encoded_sig != expected_sig:
raise ValueError('bad signature')
return None
return data
我的问题是,这段代码对于已经登录的用户来说是成功的,但是对于未登录的用户,我得到了B64解码的“错误填充”错误。但是,如果我用“=”符号填充有效负载,那么所有用户都会以“登录”的身份通过授权,不管他们是否真正登录
有人能帮我吗?这对我有用
def base64_url_decode(inp):
inp = inp.replace('-','+').replace('_','/')
padding_factor = (4 - len(inp) % 4) % 4
inp += "="*padding_factor
return base64.decodestring(inp)
def parse_signed_request(signed_request='a.a', secret=FACEBOOK_APP_SECRET):
l = signed_request.split('.', 2)
encoded_sig = l[0]
payload = l[1]
sig = base64_url_decode(encoded_sig)
data = json.loads(base64_url_decode(payload))
if data.get('algorithm').upper() != 'HMAC-SHA256':
print('Unknown algorithm')
return None
else:
expected_sig = hmac.new(secret, msg=payload, digestmod=hashlib.sha256).digest()
if sig != expected_sig:
return None
else:
print('valid signed request received..')
return data
(4-len(inp)%4)
已在0和3之间。你不需要取模4。另外还有base64.urlsafe\u b64decode
,它已经为您执行了inp.replace('-','+').replace('''-','/')
。