I used to use a library called Auth_OpenID for my consumer which worked for
all providers including yahoo. I switched to using Zend_OpenId and now it
doesn't work for yahoo as a provider.  Has anyone gotten this to work?

After looking at the code, I was able to get it to work, but I had to do the
following (which seems not good, but it works)...

In Zend_OpenId_Consumer::_checkId(), I had to remove these lines:

        if (!$this->_associate($server, $version)) {
            return false;
        }

Inside the _associate() function it ends up making a call to yahoo servers
which returns a status 400 (Bad Request).  After doing some more debugging
it looks like yahoo doesn't support this:
                'openid.mode'         => 'associate',
                'openid.assoc_type'   => 'HMAC-SHA256',
                'openid.session_type' => 'DH-SHA256',

In Zend_OpenId_Consumer::verify() I had to remove this line as well:
            if ((isset($params['openid_identity']) &&
                 $params["openid_identity"] != $id) ||
                (isset($params['openid_op_endpoint']) &&
                 $params['openid_op_endpoint'] != $server) ||
                $discovered_version != $version) {
                //return false;
            }

This is because openid_identity and openid_claimed_id are *almost* the same,
but openid_claimed_id as an extra #XXXX at the end.  Not sure if yahoo is
doing somewhere weird.  So that check then fails and returns false (cause
$id got set to openid_claimed_id 20 or so lines above in the file.

Any ideas?
-- 
View this message in context: 
http://www.nabble.com/Zend_OpenId-fails-for-yahoo-openid-tp15910120s16154p15910120.html
Sent from the Zend Framework mailing list archive at Nabble.com.

Reply via email to