'Thanks to
http://stackoverflow.com/questions/3302946/how-to-base64-url-decode-in-python
and
http://sunilarora.org/parsing-signedrequest-parameter-in-python-bas'

@classmethod
def parse_signed_data(cls, signed_request, secret=facebook_settings.FACEBOOK_APP_SECRET):

    from open_facebook.utils import base64_url_decode_php_style, smart_str
    l = signed_request.split('.', 2)
    encoded_sig = l[0]
    payload = l[1]
    from open_facebook.utils import json
    sig = base64_url_decode_php_style(encoded_sig)
    import hmac
    import hashlib
    data = json.loads(base64_url_decode_php_style(payload).decode('utf-8'))
    algo = data.get('algorithm').upper()
    if (algo != 'HMAC-SHA256'):
        error_format = 'Unknown    algorithm    we    only    support    HMAC-SHA256    user    asked    for    %s'
        error_message = (error_format % algo)
        send_warning(error_message)
        logger.error('Unknown    algorithm')
        return None
    else:
        expected_sig = hmac.new(smart_str(secret), msg=smart_str(payload), digestmod=hashlib.sha256).digest()
    if (not (sig == expected_sig)):
        error_format = 'Signature    %s    didnt    match    the    expected    signature    %s'
        error_message = (error_format % (sig, expected_sig))
        send_warning(error_message)
        return None
    else:
        logger.debug('valid    signed    request    received..')
        return data
