Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there a better way to fetch OpenID infos from provider?

I am new to the OpenID logic. I am using the OpenID component for CakePHP by Cakebaker, with the PHP OpenID library by JanRain.

It's all working quite well, but I could not find an exhaustive way to retrieve user informations depending on provider and method (sreg vs. ax). So this is what I came up with:

if ($axResponse) {
    if (is_array($a = $axResponse->get('http://axschema.org/contact/email'))) {
        $user_record['email'] = $a[0];
        if (is_array($b = $axResponse->get('http://axschema.org/namePerson'))) {
            $user_record['nickname'] = $b[0];
        }
    } else if (is_array($a = $axResponse->get('http://schema.openid.net/contact/email'))) {
        $user_record['email'] = $a[0];
        if (is_array($b = $axResponse->get('http://schema.openid.net/namePerson'))) {
            $user_record['nickname'] = $b[0];
        }
    }
} else if ($sreg) {
    if (isset($sreg['email'])) {
        $user_record['email'] = $sreg['email'];
    }
    if (isset($sreg['nickname'])) {
        $user_record['nickname'] = $sreg['nickname'];
    }
}

Although I tested it successfully with Google, Yahoo! and AOL's OpenID, I'm sure I would run into trouble with other / smaller providers. Is there a better and nicer way to achieve the same result? This seems particularly flawed if I try to fetch other optional fields...

like image 699
damusnet Avatar asked Sep 22 '10 17:09

damusnet


1 Answers

Please keep in mind that OpenID is a standard for user authentication, not for authorization for data access. You can, naturally, get certain user info using OpenID, but it's not the protocol's primary intent. OAuth is the standard for authorization and you might want to start with that, if fetching user data is what you need.

like image 179
Slavic Avatar answered Oct 19 '22 06:10

Slavic