出自Yahoo_cn_wiki
您在这:首页 > NCP文档中心 > NCP接口文档 > 对回调请求鉴权
对回调请求鉴权
NCP平台调用开发者应用的时候,会传递y_sig参数,该参数是NCP对调用参数的签名,应用可以通过验证y_sig来确认该调用是由NCP发起的,防止应用的回调接口被第三方非法调用。
签名算法步骤
- 将NCP传递给应用的所有GET参数(除签名外)按照参数名升序排序
sorted_args = sort_by_key(args except y_sig); - 将所有参数按照KEY=VALUE的方式拼成一个长串
foreach sorted_args as key=>value do arg_string = concat(arg_string, key, '=', value); - 将签名密钥放在字符串的最前面得到要签名的数据串
sign_data = concat(secret_key, arg_string) - 对上面的签名数据串计算MD5摘要,并转换成十六进制转成小写
sig = lowercase(hex(md5(sign_data))) - 将上面计算抽出来的sig与y_sig进行比较,若两者相同则签名是正确的,否则鉴权失败
注:签名密钥(Secret Key)是开发者在注册应用时与接口密钥同时获得的字符串。
签名算法示例
测试用例
回调请求的URL:
http://example.com/myapp/callback.cgi
?y_api_key=I.I_lqNoqYjOjinvzYoG..rJOorzrbf21zn_zd3D27tR8adB5A--
&y_expires=1206523160
&y_iframe=0
&y_module_id=22200000005142
&y_module_ver=2
&y_session_key=68e07f89dc41f9475370200bbadb663c
&y_site_domain=chishui.zhan.cn.yahoo.com
&y_site_id=8222200000000297
&y_site_mod_sig=175029b34b11df239d212a66960c39061206523160&
&y_user_id=ncpchishui%23in
&y_user_role=1
&y_sig=678ab7ac4434256b95c07b8a58cdf121
签名密钥:
jvG1V65ortpSudTuiTXGuDo8wIRExsSlHD0Gy3lP8QR8UcXMSw--
签名结果:
678ab7ac4434256b95c07b8a58cdf121
PHP代码示例
function AuthYahooRequest( $secret_key ) { if(!isset($_GET["y_sig"])) return false; $args = $_GET; unset( $args["y_sig"] ); // 排除y_sig参数 ksort( $args ); // 对参数排序排序 $data = $secret_key; // 将签名密钥放在最前面 foreach ($args as $key => $value) { $data .= "$key=$value"; // 拼装参数串 } $sig = md5($data); return ($_GET["y_sig"] == $sig); }
