How to decode base64 url in python?

前端 未结 9 1455
一个人的身影
一个人的身影 2020-12-28 15:24

For Facebook fbml Apps Facebook is sending in a signed_request parameter explained here:

http://developers.facebook.com/docs/authentication/canvas

They have

9条回答
  •  既然无缘
    2020-12-28 15:54

    I have shared a code snippet for parsing signed_request parameter in a python based facebook canvas application at http://sunilarora.org/parsing-signedrequest-parameter-in-python-bas:

    import base64
    import hashlib
    import hmac
    import simplejson as json
    
    def base64_url_decode(inp):
        padding_factor = (4 - len(inp) % 4) % 4
        inp += "="*padding_factor 
        return base64.b64decode(unicode(inp).translate(dict(zip(map(ord, u'-_'), u'+/'))))
    
    def parse_signed_request(signed_request, 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':
            log.error('Unknown algorithm')
            return None
        else:
            expected_sig = hmac.new(secret, msg=payload, digestmod=hashlib.sha256).digest()
    
        if sig != expected_sig:
            return None
        else:
            log.debug('valid signed request received..')
    return data
    

提交回复
热议问题