我正在尝试解码 facebook signed_request 以向非授权用户提供登录表单。我的代码如下:
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
我的问题是,对于已经登录的用户,此代码可以成功运行,但对于未登录的用户,我收到 b64decode 的“不正确填充”错误。但是,如果我用“=”符号填充有效负载,那么所有用户都会通过“登录”的授权,无论他们是否真的登录。
有人可以帮我吗?