忍者ブログ

Home > OpenID

OpenID Archive

[PR]

  • 2024-04-27 (Sat)
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

  • Comments (Close):
  • TrackBack (Close):

OP initiated(っていうか第三者initiated?)でOpenID Launcherなるサービスを作ろうとした

summary

OP initiatedを利用すれば、
「このRPにこのOPでログイン」
っていうボタンが作れるんじゃ?と言う話。

OP-Initiated Flow(2) - r-weblifeの下記の部分を読んで、

■ 今回やってみて気づいたこと

『OP側の実装はそんなに大変ではなさそう』

   1. return_toを知る
   2. Statelessモードの認証要求を自分自身のエンドポイントに送信
   3. OP駆動のときだけRP確認画面を省略?

「RPのreturn_toを調べて、statelessなリクエストをOPに送りつければ、
指定したRPにログインされられる」という当たり前なことに今さら気づいた。
(第三者initiatedとでも言っておきましょうか・・・)

というわけで、RP一覧+このOPログインボタンを並べたランチャー的なものを作れば、
OpenID普及に一役買えるのでは…なんて思って作ってみました。

OpenID Laucher

結果は…見ての通り惨敗です。

OpenID - Wikipediaの一覧を上から試していってたんですが、
認証失敗しまくりで心折れちゃいました。

そんなこんなで今までの作品の中で一番と言っていいほど、
ものすごく中途半端な状態での公開となりました。

return_toをもっと簡単に調べれる時代が来たら、再挑戦したいと思います。
※ 手動で調べてたらかなり体力かかりました^^
  XRDSから機械的に取ってくれば楽なんだろうけど、
  そのXRDSを返してくれるURLがわからんから結局人力調査が…

追記 2009/06/07 14:00

わざわざreturn_to調べてOPに送り付けなくても、
RP側のOpenIDログイン用のリクエストを叩けばよかったのか…?
(JanRainでいうtry_auth.php?~みたいなの)

追記 2009/06/10 21:00

OP駆動→OP initiatedに改めました。
業務連絡、OP initiated と言う言い回しで!

追記 2009/06/11 23:00

タイトルミスってました。

PR

OpenID1.1→2.0の微妙な変更点(今さら)

昨日(っていうか今日)公開したOpenIDで入力補完を作ってる時に知ったことをメモ。(かなり今さらですが・・・)

内容は、記事タイトルの通り1.1→2.0の微妙な変更について。

OpenIDの入力欄(input要素)のname属性を、 2.0では、"openid_identifier"にすべき(SHOULD)となっています。
実はこれ、1.1だと、"openid_url"推奨(RECOMMENDED)になってたんです。

僕は一応2.0の方に従いました。
どちらも目的はオートコンプリートが効くようにだと思います。
(それなら変えない方が良かったんじゃ…?)

ついでに1.1だと、「input要素の背景にOpenIDのロゴをつけたらいいんじゃない?」みたいな記載がありますが、2.0ではなくなっています。
僕はあった方がかっこいいと思い、1.1風にしてみました。
(それでいいのかはわかりませんが)

ただ、OpenIDは商標なので実はいろいろと面倒らしいので、外すかもしれません。
「ロゴにリンクを貼る」っていうのは背景にしちゃった時点でむりなので、
legend要素に貼るという逃げで一応対処しました。

以上、メモでした。

OpenIDでプロフィールの入力補完(名前とかメールアドレスとか)

「OpenIDって何が便利なの?」というよくある質問への回答のひとつになれば・・・。
(そんな大それたもんじゃないけど。)

これぐらいの軽い機能なら、 ソーシャルなサービスを利用 or 提供しない人にも恩恵があるかなぁと思います。
(ネットをガシガシ使わない人にはなかなか便利さがわかってもらえないので…)

というわけで作ってみました。

「OpenIDでプロフィールを簡単に入力する」サンプルです。

情報の取得はSREGでやりました。
2.0の時代だからAXでやる方がいいんだろうけど、対応してるOPが多そうだったので。
まぁ、結局まともに使えそうなのは、Verisign PIPぐらいでしたが。
(あとはopenid.ne.jpがnickname,fullname,emailを取れました。その他の代表的なとこは失敗。XRIは試してません。)
AX版も余裕があればやってみます。

本来こういう使い方の時は、"checkid_immediate"で非同期にやって、
駄目なら新しいウィンドウとかで"checkid_setup"した方がいいかとも思ったんですが・・・。
初めて住所入力するサイトに認証を許可してるわけないし、
どうせOPは属性情報渡す時は許可を得る必要があるだろうから、意味なしと判断してやめました。

ので、何かウィンドウが開いて鬱陶しい点についてはご勘弁下さい。

2009/05/17 10:50追記

submitボタンが「register」になってたのを修正しました。
僕としては資料請求とか、Q&Aとかそういう一度限りなやつを想定してたので、
(っていうか登録するなら普通の使い方すればいいし)
「request」に変更しときました。

あと、OpenID User Interface Extensionってやつにそってポップアップとかやった方がいい気がするので考え中です。

2009/05/17 11:50

微妙にポップアップの仕様にしたがってみました。
ライブラリがまだよく理解できてないので応急処置ですが…。

WiresharkでOpenIDのお勉強

仕様のお勉強にはシーケンスを見るのが一番ということで。

環境構築

まずは、Wiresharkをダウンロード。
インストールは全部Nextで。

次にOpenIDの環境を整える。

わかりやすいように、
localhost/openid/test/rp/
localhost/openid/test/op/
って構成で作ります。
(ディレクトリ階層を減らすとexamplesのコードを変えないといけないので若干冗長です)

■ RP/OP共通
 ○ OpenID EnabledからPHP OpenID Library Version 2.1.3をダウンロード&解凍。
 ○ openidにリネームしてドキュメントルートに配置。
 ○ openid/examplesをtestにリネーム。
 ○ Auth/OpenID/CryptUtil.phpの
  「define('Auth_OpenID_RAND_SOURCE', '/dev/urandom');」を
  「define('Auth_OpenID_RAND_SOURCE', NULL);」に。

■ RP
 ○ examples/consumerをrpにリネーム。
 ○ rp/common.phpの
  「$store_path = "/tmp/_php_consumer_test";」を
  「$store_path = "_php_consumer_test";」に。
 ○ _php_consumer_test内を書き込み可能に。(必要なら)

これでRPは完成。
localhost/openid/test/rp/でアクセスできる。

■ OP
 ○ examples/serverをopにリネーム。
 ○ op/config.phpを作成。(内容は以下)

<?php
/**
 * The URL for the server.
 *
 * This is the location of server.php. For example:
 *
 * $server_url = 'http://example.com/~user/server.php';
 *
 * This must be a full URL.
 */
$server_url = "http://localhost/openid/test/op/server.php";

/**
 * Initialize an OpenID store
 *
 * @return object $store an instance of OpenID store (see the
 * documentation for how to create one)
 */
function getOpenIDStore()
{
    require_once "Auth/OpenID/FileStore.php";
    return new Auth_OpenID_FileStore("_php_server_test");
}

?>

 ○ php.iniのextension=php_curl.dllのコメントアウトを外す。
 ○ op/index.phpの
  「header("Location: server.php");」を
  「header("Location: http://localhost/openid/test/op/server.php");」に。
  (http://localhost/openid/test/op/をOP Identifierとして使えるように。)

これでOPも完成。
アクセスはlocalhost/openid/test/op/で。
※ config.phpとindex.phpはURLが変わる度に修正する必要ありですね。

キャプチャ

さて、いよいよキャプチャです。

って言っても超簡単ですが。

Wiresharkを起動し、Capture→Interfacesから、
キャプチャしたいインタフェースをStartすればOK。

RPにアクセス→OPで認証までやったら、Capture→InterfacesからStop。
これでデータ取得完了。

あとは、Filter: ip.addr==アクセス先のIP等でApply、 Protocol列クリックでソートすれば上からHTTPのデータを見れます。

はまったところ

localhostへのアクセスがキャプチャできず。
いろいろ試してみるも、結局断念。

PC3台を動員し、なんとかDirect Communicationのデータも取得できました。
需要あれば公開します。
(僕自身まだ全然中身見れてないけど^^)
※ localhostをキャプチャしようとNW設定いじってたらネットできなくなった
  …なんてことになったら、route -f&再起動で直るかもしれません。

以上、長駄文続きですいません。

Win上のCentOSにApache/PHP/MySQLを入れてCakePHPを動かすところまで

やった。

WEB+DB PRESS Vol.50にCakePHP+OpenIDのサンプルが載ってて、動かしてみたくなったので。
フレームワークはあんま得意じゃないことだし、リハビリがてらお勉強。

以下手順。
久々なので文章がおかしいのはご勘弁。
(あとなんか情報抜けてるかもなのでお気軽に突っ込んで下さい)

CentOS導入

VMWare Playerはインストール済みなので割愛。

CentOS 5.3仮想マシンをダウンロード&解凍。
VMWare Playerからこのファイルを開けば起動できちゃう。
(ログインはroot/bagsideで)

なんとお手軽な!

ちなみに上記のサイトはCentOS以外にもいろいろ仮想マシンが置いてあって超便利です。

お次はApache/PHP/MySQL

インストール

yum -y install httpd php php-mysql mysql-server

Apache設定

vi /etc/httpd/conf/httpd.conf

修正
ServerName localhost:80
AllowOverride All(<Directory "/var/www/html">内)

追記
LoadModule php5_module modules/libphp5.so
AddType application/x-httpd-php .php

MySQL設定

パスワードはサボって空白のまま。なので設定なし。

mysql -u root

からSQLを叩いてデータベース・テーブルを作成。
作成後は、

use DB名;
desc テーブル名;

で確認できる。

起動

/etc/init.d/httpd start
/etc/init.d/mysqld start

CakePHP導入

ダウンロード・展開
wget http://cakeforge.org/frs/download.php/717/cake_1.2.3.8166.tar.gz/donation=complete
tar -zxvf cake_1.2.3.8166.tar.gz

リンク・権限
ln -s /root/cake_1.2.3.8166/app/webroot /var/www/html/cake
chmod 755 /root
chmod 757 /root/cake_1.2.3.8166/app/tmp
chmod 757 /root/cake_1.2.3.8166/app/tmp/cache

設定
vi /root/cake_1.2.3.8166/app/config/database.php
ID・パスワード・DB名を設定

とりあえずこれでhttp://localhost/cake/にアクセスすれば動く。

Web+DB Pressのサンプルを動かす

wget http://gihyo.jp/assets/files/magazine/wdpress/2009/50/WDB50-PHP01-openid-bbs.zip
ungip WDB50-PHP01-openid-bbs.zip
mv wd50 /var/www/html

http://localhost/wd50/openid_bbs/で動作。

めでたしめでたし。

オマケ:telnetでホストOSからアクセス

※ セキュリティ上ダメダメなので注意!

yum -y install telnet-server

vi /etc/hosts.allow
追記
in.telnetd : xxx.xxx.xxx.xxx

vi /etc/securetty
追記
pts/0

vi /etc/pam.d/remote
コメントアウト
#auth       required     pam_securetty.so

/etc/init.d/xinetd restart

ifconfig
このIPアドレス表示を使う

これでWindows上からTeraterm等でrootログインできます。

以上、あぁやっぱり時間空けちゃうとブログ能力落ちるなー。

Home > OpenID

Search
Loading
Feeds
Links
スポンサードリンク

Page Top