OpenIDやOauthを使ってログイン連携をする時に必要だったことまとめ

NO IMAGE

一通り連携をしできたので情報として必要だったことをことをまとめておきます

PHPのモジュールとしてはopenid/php-openid · GitHubがメジャーそう
Zend Frameworkにも標準搭載されてるので使えるのかな??((他のフレームワークにも用意されてることが多いみたい))
OpenIDは規格が厳密っぽいのですべて同じ方式でとってこれる((厳密に言えば1系と2系があるみたいだけど1系のはてなもとってこれたので気にしない))

mixi

仕様 << mixi Developer Center (ミクシィ デベロッパーセンター)
取れるのはニックネームだけみたい

google

Gmail OpenID のエンドポイント URL – 京の路

emailとかを取るにはAttribute eXchangeを使う

Federated Login for Google Account Users – Google Accounts Authentication and Authorization — Google Developers

この辺が取れるっぽい

"country"
"email"
"firstname"
"language"
"lastname"

リクエスト部分

        global $ax_attributes;
        $ax_request         = new Auth_OpenID_AX_FetchRequest();
        while (list($key, $val) = each($ax_attributes)) {
            $attribute[] = Auth_OpenID_AX_AttrInfo::make($key, 1, true, $val);
        }
        foreach($attribute as $attr){
            $ax_request->add($attr);
        }
        $auth_request->addExtension($ax_request);

レスポンス部分

            $ax_resp = Auth_OpenID_AX_FetchResponse::fromSuccessResponse($response);
    
            if ($ax_resp) {
                global $ax_attributes;
                while (list($key, $val) = each($ax_attributes)) {
                    $ax_data = $ax_resp->get($key);
                    if(!is_object($ax_data)) {
                        $axreg[$val] = $ax_data;
                        $success .= "
$val
$ax_data[0]
"; } } }

NTTID

goo,docomo,ocnをまとめた感じ。

AX非対応みたい
ニックネームすら返ってこない((gooでしか試してないけど・・・))

エンドポイント https://login.nttid.jp/openid

facebook

OpenIDとは別規格??

http://developers.facebook.com/docs/guides/web

今回は連携しなかったので忘れる

Twitter

これだけOauthという別規格。
作法がちょっと違うけど、情報は多いし簡単。
APIの仕様は結構変わるのでそこだけ心配

モジュールはこれが使い慣れてるのでこれを使う((twitteroauthのなかのjson_decodeの第二引数が入ってないのが不便なので書き換えちゃうといいかもしれません))
abraham/twitteroauth · GitHub

Zendフレー(ry

php-curlが必要

ない場合はモジュールの書き換えが必要
入れられる場合は入れましょう

yum install php-curl

ソースの場合はごにょごにょする

下準備

http://twitter.com/oauth_clients でアプリケーションを登録((twitterのアカウントが必要です))
consumer_key, consumer_key_secret を取得

ログイン時に引っ張って来たいデータはこのAPI

GET account/verify_credentials | Twitter Developers

$verify_credentials = $connection->get('account/verify_credentials');