如何在PHP中获得安全的AuthSub会话令牌?

时间:2010-03-26 17:43:39

标签: php zend-framework gdata-api authsub

我正在使用Google / YouTube API开发需要访问用户YouTube帐户的网络应用程序。

正常的不安全请求工作正常,我可以毫无困难地将一次令牌升级为会话令牌。当我尝试将安全令牌升级为会话令牌时出现问题,我得到:

错误 - CIzF3546351vmq_P____834654G的令牌升级失败:令牌升级失败。原因: 无效的AuthSub签名。

我用这个:

    function updateAuthSubToken($singleUseToken)
    {
        try {
        $client = new Zend_Gdata_HttpClient();
        $client->setAuthSubPrivateKeyFile('/home/myrsakey.pem', null, true);
        $sessionToken = Zend_Gdata_AuthSub::getAuthSubSessionToken($singleUseToken, $client);
        $sessionToken = Zend_Gdata_AuthSub::getAuthSubSessionToken(trim($singleUseToken), $client);  
        //$client->setAuthSubToken($sessionToken); 
        } catch (Zend_Gdata_App_Exception $e) {
            print 'ERROR - Token upgrade for ' . $singleUseToken
                . ' failed : ' . $e->getMessage();
            return;
        }
        $_SESSION['sessionToken'] = $sessionToken;
        $date = gmdate("M d Y H:i:s", mktime(0, 0, 0, 1, 1, 1998));
        header('Authorization: AuthSub token="'.$_SESSION['sessionToken'].'" data="GET 
    https://www.youtube.com/auth_sub_request '.$date.' 15948652339726849410" '. 
    'sig="MIICXAIBAAKBgQDLJn/sr7TrmQpsEaL312k9dEpikVGFHbE+FjNg7/lfagkTZXf3'.
    't96omgSEyZat2RcckVAGs9dU5kbGLJxEaW2ChQplzCKDi+20HZZo7C1QCluaMJ6b'.
    ...
    '0pj+zWPy4T04PH3elN6EkhQ5Vxy5wbBkugqIDqfOKuM=" '.
    'sigalg="rsa-sha1"');
        }

我不明白是什么:nonce:一个随机的64位无符号数,编码为十进制的ASCII字符串!我必须放在$ date(...'。$ date。'15948652339726849410“'...)

之后

2 个答案:

答案 0 :(得分:0)

我相信你想要的电话是:

$sessionToken = Zend_Gdata_AuthSub::getAuthSubSessionToken($singleUseToken, $client);

调用Zend_Gdata_AuthSub::AuthSubRevokeToken()将撤消您的一次性使用令牌。有一个很棒的提示here,它展示了完整安全的AuthSub流程。

答案 1 :(得分:0)

如果没有详细说明客户端库,可以这样做:http://codershelpingcoders.com/

看看你是否愿意。