https://developers.facebook.com/docs/authentication/signed_request/处的文档提供了编码数据的示例,这似乎是错误的。
<?php
echo base64_decode("eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsIjAiOiJwYXlsb2FkIn0");
echo "\n";
echo base64_encode('{"algorithm":"HMAC-SHA256","0":"payload"}');
echo "\n";
?>
给出输出:
{"algorithm":"HMAC-SHA256","0":"payload"}
eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsIjAiOiJwYXlsb2FkIn0=
base64_decode
的参数缺少=
填充字符。在同一数据上使用base64_encode
表明它不是用PHP创建的,或者使用的PHP版本被窃听,或者我不知道是什么。相同的文档页面提供了签名,用于签署丢失的=
字符串。
问题:在Facebook文档中是否遗漏了填充错误,或者我是否应该在生产代码中预期这些遗漏?
其他语言不像php那样“优雅地”失败,并且实际上不会解码缺少填充符号的base64数据 - 所以这有点重要。
答案 0 :(得分:2)
我的商店用C#做的东西,我们自己去添加填充。
了解Facebook,多年来在他们的平台上开发......好吧,让我们说这个小文档打嗝并不让我感到惊讶。