出自Yahoo_cn_wiki

跳转到: 导航, 搜索

您在这:首页 > NCP文档中心 > NCP接口文档 > 对回调请求鉴权

对回调请求鉴权

目录

NCP平台调用开发者应用的时候,会传递y_sig参数,该参数是NCP对调用参数的签名,应用可以通过验证y_sig来确认该调用是由NCP发起的,防止应用的回调接口被第三方非法调用。

签名算法步骤

  1. 将NCP传递给应用的所有GET参数(除签名外)按照参数名升序排序
    sorted_args = sort_by_key(args except y_sig);
  2. 将所有参数按照KEY=VALUE的方式拼成一个长串
    foreach sorted_args as key=>value do arg_string = concat(arg_string, key, '=', value);
  3. 将签名密钥放在字符串的最前面得到要签名的数据串
    sign_data = concat(secret_key, arg_string)
  4. 对上面的签名数据串计算MD5摘要,并转换成十六进制转成小写
    sig = lowercase(hex(md5(sign_data)))
  5. 将上面计算抽出来的sigy_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);
}
个人工具