首先让我明确表示我对前端应用程序没有任何控制权(它是一个iOS应用程序而且我已经按照它的方式使用它)。使用身份验证令牌I通过类中的以下功能进行编码和解码。
我的应用程序根据用户名/密码返回authToken,然后该前端应用程序通过此authToken继续与我通信,我每次都会解码以查找用户信息。
如您所知,此算法会生成需要进行urlencoded编码的字符,因此我会在发送电汇之前对其进行编码。
我注意到前端应用程序自动对authToken进行urldecoding,然后发送回urldecoded的。
但是这里的事情变得复杂了,我在服务器上也是.htaccess,我相信它会编码或解码,不确定。
最终结果是,当令牌到达应用程序时,它与我发送的内容不同。
我不知道如何才能正确处理它,我的前端应用程序会对其进行编码,然后这个.htaccess会做一些事情,最终结果我没有原始令牌。
public static function encrypt($data, $secret) {
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$key = pack('H*', $secret);
return base64_encode($iv . mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, $iv));
}
public static function decrypt($data, $secret) {
$data = base64_decode($data);
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$iv = substr($data, 0, $iv_size);
$data = substr($data, $iv_size);
$key = pack('H*', $secret);
return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, $iv), chr(0));
}
在我的视图层中,由上述函数生成的authToken。
echo urlencode($authToken)
.htaccess文件
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)$ index.php?uri=$1 [QSA,L]
如果我的方法有误,你们如何处理认证呢?
编辑(示例数据):
+zrOchaEg6X9oXMsSz2yq7jcxGLsIsh5XpgUEEhqLuoGT6nqNcpwevPXCUCPiUQ9 (my app sent down this)
zrOchaEg6X9oXMsSz2yq7jcxGLsIsh5XpgUEEhqLuoGT6nqNcpwevPXCUCPiUQ9 (front end app sent me back this)
EzfudmhVDKhfiZU1rN+h5vgdq+JsHFBI6suio2wwvS3415UvHcqaNkj6RCcPNcrN (my app sent this)
EzfudmhVDKhfiZU1rN h5vgdq JsHFBI6suio2wwvS3415UvHcqaNkj6RCcPNcrN (front end app sent this)
p45ho0s2qWBxzCWsOohSL5u+noxUdpkjfjVy/wib58Sx2lqXIfco3uHLpaiDLy58 (my app sent this)
p45ho0s2qWBxzCWsOohSL5u noxUdpkjfjVy/wib58Sx2lqXIfco3uHLpaiDLy58 (front end app sent me back this)
NBEwy2WAInAgqC54WR6kNHVVpTObN1x1Wbu9JRD/UTCuMLbtHAomHFWDX8olFrC9 (my app sent this)
NBEwy2WAInAgqC54WR6kNHVVpTObN1x1Wbu9JRD/UTCuMLbtHAomHFWDX8olFrC9 (front end app sent me back this)
答案 0 :(得分:0)
取决于你的实现,如果在任何时候它将作为get参数传递然后是,但似乎你遇到了+符号问题,而不是尝试使用rawurlencode()和rawurldecode()
答案 1 :(得分:0)
除非您在显示文本时记录错误或执行某种解码,否则在我看来您的iOS应用程序并不真正进行URL编码。
如果是这种情况,则不应该有简单的+符号,这些字符应该在URL编码后被%XX替换。空格不是基础64的一部分,因此不应将空格转换为+符号。
另一方面,发送的字符串对我来说看起来像64,所以也许你根本不需要64位编码。