タグ「openid」が付けられているエントリー

php-openidのドキュメントを作成する方法

| php-openidのドキュメントを作成する方法

備忘録的メモ.前提条件として,apacheやphpは入っていること,pearが使える状態であること.こっちのOSはUbuntu9.10amd64です.他の環境でも似たようなものです.

PHPでOpenIDなライブラリといえば,php-openidだと思います.2.2系になってから,githubに移行して,docディレクトリが無くなりました.「なんでドキュメントがないんだ,むぎゃ!」って思っていたのですが,やり方がわかったので,メモ.

DOCUMENTATION
=============

You can view the HTML library documentation in the doc/ directory.

This package's documentation is in PhpDoc format.  To generate the
documentation, install phpdoc and run the admin/makedoc.sh script.
Phpdoc lives at:

  http://www.phpdoc.org/

openid's php-openid at master - GitHub

書いてある通りなんですが,ドキュメントはPhpdocなるものを使って作れと言っています.Phpdocの正式名称はphpDocumentorで,pearからインストールできるようなので,入れます.

$ sudo pear install --alldeps PhpDocumentor

簡単ね!続いて,ドキュメントをmakeするよ.ディレクトリとかは適宜読み替えて下され.

$ unzip openid-php-openid-2.2.2-0-ga287b2d.zip
$ cd openid-php-openid-782224d
$ chmod +x admin/makedoc.sh
$ admin/makedoc.sh

簡単ね!これでdocにドキュメントができあがります.

参考:
How to install PhpDocumentor on Ubuntu | greenhughes.com

ちょっと所用があるので,OpenID AXを喋るOPとRPを作ってみた.厳密に言えば,作ってみたではなく動かしてみたなのだが,ネット上に情報が少なすぎる,特にAXを喋るOPの情報が皆無に等しいので,とりあえず書き残しておく.実装はOpenID EnaledのPHP Library 2.1.3を使いました.PHPは5.3系で上手く動かなかったので,5.2.10でやってます.apacheは2.2.12で,OSはUbuntu9.10x64です.

AXを喋るRPの実装
まずはRP側を実装します.examples/consumerを用いれば,RPは簡単に作れます.しかも,サンプルにはSregとPAPEを喋るように作られています.まぁ,普通に動かせば動きます.んで,AXを喋るようにいくつか改変します.基本的にAXはSregやPAPEと同じExtensionなので,参考にしながら実装します.実装に当たっては,当然ながらドキュメントが役に立ちます.読みにくいですけどね.

まずはcommon.phpをいじります.AX関連のクラスを使いますので,doIncludes()の中で,require_once "Auth/OpenID/AX.php"しておきます.papeを参考にすると,ここらで定数などを宣言しているようなので,真似して宣言してみます.

global $ax_attributes;
$ax_attributes = array(
'http://axschema.org/contact/email' => 'email',
'http://axschema.org/namePerson/first' => 'firstname',
'http://axschema.org/namePerson/friendly' => 'nickname');

属性型はaxschema.orgにしました.別に他のでもいいです.次に,index.phpを変更しておきましょう.PAPEの部分を参考にします.というか,バッサリ頂きます.61-67行目を以下のように置き換えちゃいます.

<p>Optionally, request these attributes:</p>
<p>
<?php
global $ax_attributes;
while (list($key, $val) = each($ax_attributes)) {
print "<input type=\"checkbox\" name=\"ax_requests[]\" value=\"$key\" checked />";
print "$key ($val)<br/>";
}
?>
</p>

恐ろしく汚いコードですが,気にしたら負けです.これでIdentifierの入力を尋ねるときに,要求するAXを3種類の中から選べるようにしています.デフォでは全部ONですが. 続いて,try_auth.phpをいじります.まず,SregとPAPEは使わないので,該当部分をバッサリ捨てます.30-38行目がSregで,40-45行目がPAPEなので,コメントアウトするなり,消しちゃうなりして,機能しないようにしておきます.で,この辺りにAXのコードを書きます.

global $ax_attributes;
$ax = new Auth_OpenID_AX_FetchRequest;
$ax_uris = $_GET['ax_requests'];
while (list($key, $val) = each($ax_attributes)) {
if(in_array($key, $ax_uris)) {
$attribute[] = Auth_OpenID_AX_AttrInfo::make($key, 1, false, $val);
}
}
foreach($attribute as $attr){
$ax->add($attr);
}
$auth_request->addExtension($ax);

3行目の$_GET['ax_requests']はindex.phpのチェックボックスからどの属性がリクエストされたかを受け取っています.そんで,その要求されたものを$ax_attributesと比較して,Auth_OpenID_AX_AttrInfoでAXのリクエストにあうように準備します.ちなみに,第3パラメータをfalseにしているので,要求する属性はrequiredではなく,if_availableになります.そんで,$ax->add($attr)で属性セットして,最後にextensionに追加する感じです.このコードはExample usage of AX in PHP OpenIDを参考にしました. 最後に,finish_auth.phpを書き換えます.SregとPAPEを無効にしたいので,41-90行目をバッサリと消しちゃいます.かわりにAX用のコードを書き加えます.

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

特に解説することもないですけど,AXの返事は$ax_resp->get($key)で取り出しています.Type URIをキーにして,取り出しています.コードを見ればわかると思いますが,何を要求したとか,何が返ってきているかは全く考えず,総当たりにチェックしてます.大した量じゃないし.そのため,!is_object($ax_data)でエラートラップしてます.getメソッドで取り出せなかった場合,Auth_OpenID_AX_Errorが返りますので,objectかどうかのチェックでさばいてます.複数の属性値が返ってきた場合でも最初の1つしか表示しない辺りも詰めが甘いですが,気にしないで下さい.気になるなら,自分で工夫して下さい.僕には必要がないコードです.

AXを喋るOPの実装
続いて,OP側を作ります.examples/serverを使います.こっちが結構に四苦八苦でした.勝手にはまっただけですけど.こっちはいじくる部分はlib/common.phpだけです.まずはSregとPAPE関連を消し去ります.56-76行目がSregで,PAPEは・・・ないですねw.なんだ,OP側のPAPEは実装されていないのか.それはそれとして,Sregが書いてあった辺りに,AX用のコードを書き加えます.

$attributes = array(
'http://axschema.org/contact/email' => '[email protected]',
'http://axschema.org/namePerson/first' => 'first',
'http://axschema.org/namePerson/friendly' => 'nickname');

$ax_requested = Auth_OpenID_AX_FetchRequest::fromOpenIDRequest($info)->getExtensionArgs();
$ax_response = new Auth_OpenID_AX_FetchResponse();
while (list($key, $val) = each($attributes)) {
if(in_array($key, $ax_requested)) {
$ax_response->addValue($key, $val);
}
}
$ax_response->toMessage($response->fields);

実に,このコードにたどり着くまでに苦労しました.何にはまっていたかは後で説明します.コードは解説する必要がないくらいに簡単です.$attributes[]の中は連想配列でType URIをキーとして,属性値を格納します.んで,$ax_requestedと比較して,リクエストされている属性を$ax_response->addValue($key, $val)でセットします.以上で完成です.

動作例

100608_ax01.jpg

これはRP側です.http://localhost/rp/です.色々突っ込みどころ満載ですが,デモですからスルーして下さい.Identity URLのところに,自前OPのidentifierを入れます.AXで取得したい属性をチェックボックスから選びます.とりま,全選択で.

100608_ax02.jpg

こっちがOPからの返事を受け取ったRPです.要求した属性が全て取得できています.下の黄枠の中にはAXレスポンスの内容を表示してみました.aliasがext0とかになっています.ここで勝手にはまってました.結果的には,これで良かったんです.問題なく動いています.これで,AXを喋るOPとRPはできあがるので,後は煮るなり焼くなり・・・.

はまったところ
OPのレスポンスを作るのに苦労しました.というか,勝手な思い込みです.上記で示したOPのコードでAXを喋らせると,違和感があったんです.例えばこのエントリで例示されているように,ax.type.nicknameでリクエストしたら,レスポンスもax.type.nicknameとax.value.nicknameで返るのが自然のように思います.僕もそうだと思っていましたが,これは全然どうでもいい話でした.ここで例示したnicknameというのはaliasなのですが,aliasについては以下のように書かれています.

The <alias> will further be used to identify the attribute being exchanged.

Final: OpenID Attribute Exchange 1.0 - Final

とのことですので,identify出来ればよろしく,何だっていいようです.なので,ここではnicknameでリクエストしても,レスポンスはfriendlyでもいいわけです.問題なのはレスポンスにおいて,friendly.typeとfriendly.valueが紐付きますので,その関係だけが保たれていれば,aliasは何でもokです.

実際のところ,上記に示したOPが喋るAXはレスポンスとしてext0とかext1というaliasを張ります.最初はこれをみて正規の手続きでやっていないからまずいんだと思い込み,AX.phpやMessage.phpの中にまでダイブして,色々と調査しました.で,追っていけば行くほど,コードは正しそうに見えてくるんです.おかしいと思って確認してみたところ,さっきの例示したエントリでも,profile_imgでリクエストして,imageでレスポンスされている.つまりまとめると,重要なのはaliasではなく,Type URIである.aliasは一意ではない(そんな定めがない)が,Type URIは一意なので,そっちを見ろということである.なるほど当然の道理である.

まとめ:
PHPでAXを喋るOPとRPを実装した.簡易版なので,色々と不十分な実装(特にOP側)となっているが,実証コードには十分である.

201006081344追記:
Apache License 2.0らしいので,10はてブ超えたらソースコード公開する.

Sig-japanとcsec-newsに流れてきたので,思い切って転載.

【タイトル】カンターラ・イニシアティブ発足記念セミナー
~アイデンティティ管理技術とビジネス活用事例~
【日 時】7月14日(火) 14:00~17:00 (受付 13:30~)
【場 所】日本オラクル株式会社 オラクル青山センター
http://www.oracle.co.jp/aoyamacenter/
【主 催】カンターラ・イニシアティブ ジャパン・ワークグループ
【後 援】リバティ・アライアンス 日本SIG
【参 加 費】無料(事前登録制)
【内 容】

1. カンターラ・イニシアティブ概要説明
2. 分科会における取組み事例
3. カンターラに集う技術事例
- Liberty/SAML 事例紹介
「SAML認証によるGoogle Appsの認証連携事例の紹介」
サイオステクノロジー株式会社
国内事業ユニット クラウドインテグレーション
ゼネラルマネージャー 博士(理学)
中田 寿穂 (なかた ひさほ) 様
- OpenID 事例紹介
「NTTComにおけるOpenID活用の取組み」
NTTコミュニケーションズ株式会社
ネットビジネス事業本部 OCNサービス部
北村 和広 (きたむら かずひろ) 様
- Information Card 事例紹介
「Information Card と Windows CardSpace のご紹介」
マイクロソフト株式会社
デベロッパー&プラットフォーム統括本部
田辺 茂也 (たなべ しげや) 様

参加予定ですので,見かけたら声をかけて下さい.呑みに行きましょう.

2月26日に虎ノ門パストラルホテルで開催されたNICT情報通信セキュリティシンポジウム2009に参加してきた.昨年に引き続き,2年連続皆勤賞です.今年は参加申込の受付番号も気合いが入っていました.2番だし(あ,特定される><).

後日発表資料は公開されるということなので,レポートは資料公開後に,どの辺がオフレコなのかを確認した上で書きます.

終了後は主催のNICTの方4人と呑みに行きました.楽しい話をありがとうございますm(__)m.

関連:
CCCに繋がらない - 4403 is written
NICT情報セキュリティシンポジウム参加報告 - 4403 is written
NICT情報セキュリティシンポジウム~まとめ - 4403 is written

200903022318追記:
資料が公開されていました.後日,このエントリは書き直されます.

200903292105追記:
書こうと思ったら,Webサイトが終了していた.なので,書かないというアプローチで.

P1000034.JPG

11月7日にベルサール九段で開催されたLiberty Alliance Day 2008に行ってきた.行ってきたというか,レジストレーションしてきたというか,いや,実験があったのだよ.本当だったら,最後の方のOpenSSOとかパネルとか見に行けるはずだったのに,例外が発生して,全く聞けなかった件.

オレ,Liberty系のイベントと相性悪いのかな?技術セミナーも1回しか参加できていない上に,遅刻していって,さらに入室して数分で終わったしorz.

ぶっちゃけ,書かなくてもいいかなと思ったんだけど,某氏より「kwsk」というお達しがあったので,kwskないけどちょっと書いてみる.

OpenIDファウンデーション・ジャパンは30日、有限中間法人として同社を10月1日に設立したことを発表した。第一期会員として国内企業32社が名を連ね、OpenIDの普及・啓蒙活動を進めていく。

OpenIDファウンデーション・ジャパンが発足 - 国内企業32社が参加 | ネット | マイコミジャーナル

ほうほう.なるほどねぇ.参加企業32社は公式サイトで確認できます.ノーコメントのKDDIが男らしいです.よく分からないのがセブン銀行で,ATM事業を展開って・・・.ATMでOpenIDを使うのだろうか・・・.他にもOpenIDにどう貢献するのかがハッキリと見えない企業がいくつか・・・.普及に貢献して下さるならいいと思いますけど.あんまりwin-winにならなそうな.

すでに全世界で2万2000以上のWebサイトがOpenIDに対応しており、国内でもミクシィや楽天、Yahoo! Japan、ライブドアなどが加わっている。「最近では、OpenID対応を発表するニュースが日々流れており、昨日はGmailが対応を表明してい た」(OpenIDファウンデーション・ジャパン 発起人代表 崎村夏彦氏)というほど、現在急速に普及が進んでいる。

OpenIDファウンデーション・ジャパンが発足 - 国内企業32社が参加 | ネット | マイコミジャーナル

最近のニュースリリースでは,マイクロソフトグーグルが対応を表明しています.OP的な意味で.事実,国内ではmixi,楽天,ヤフー,ライブドア,はてなとメジャーどころが対応しているので,ネット民総OpenID化できたといっても過言ではないと思います.使うかどうかは別として.

今後の活動としては、公開仕様の日本語化支援、講習会・講演会・セミナー等の開催、会員組織の運営、コミュニティ等への支援・情報提供が挙げられており、12月12日にはOpenIDのビジネス活用を探るセミナー「OpenID BizDay」が開催される予定。

さらに、シングルサインオンなどのID管理仕様「Liberty Alliance」の普及・啓蒙を進めているリバティ・アライアンス日本SIGとも連携し、テストや勉強会・セミナーなどを共同で実施していく。

OpenIDファウンデーション・ジャパンが発足 - 国内企業32社が参加 | ネット | マイコミジャーナル

1番近いところだと,11月7日(金)にベルサール九段で行われるLiberty Alliance Day 2008だろうか.発起人の崎村さんがパネラに入ってるし.きっとその時間には行けるはず.たぶんもっと早く行けると思うけど・・・.

関連:
日本の「OpenID」普及団体が本格活動、企業に参加呼びかけ
Windows Live IDで「OpenID」をサポートへ - 実用化は2009年を予定 | ネット | マイコミジャーナル
GoogleがOpenIDをサポートへ - APIも公開 | ネット | マイコミジャーナル
Liberty Alliance Day 2008
セゾンカードがOpenID対応に? - 4403 is written
mixi OpenIDに対応 - 4403 is written

OpenIDでのNetアンサーログイン開始により2008年10月23日をもってNetアンサー規約を変更いたしました。

Netアンサー規約変更のお知らせ|クレジットカードはセゾンカード

おおお!ついにクレジットカードにまでOpenIDの流れが!これはチェックしなくては!

081024_saison.png

OpenID対応・・・だ・・・と?Yahoo IDしかないじゃん!!そんなのかんけーねー!そんなのかんけーねー!

これ・・・本当の意味でのOpenID対応とちゃうよ.外部認証APIに対応しました程度のOpenID対応だよ.ガッカリだよ.最初から使う気はなかったけど.

200810241310追記:

081024_saison02.png

やっぱりYahoo IDのみではないか.mixiだってOpenID!LivedoorだってOpenID!あ.OpenID(って名乗るけどYahoo! JapanのOpenIDしか許可しないけどOpenIDを使うから一応)対応ってことですね><.

ブログ・ソフトウェアおよびサービス大手のシックス・アパート株式会社(本社:東京都港区、代表取締役:関 信浩)は、ブログ・ソフトウェア「Movable Type 4.2」が、株式会社ミクシィ(本 社:東京都渋谷区、代表取締役社長: 笠原 健治)が本日発表したOpenID認証サービス「mixi OpenID」に対応したことを発表します。シックス・アパートは「mixi OpenID」認証を利用可能にするMovable Type用プラグインを開発し、本日よりMovable Typeユーザー向けに「Movable Typeプラグインディレクトリ」にて無償で提供します(mixiCommentプラグイン)。

Six Apart - シックス・アパートが、Movable Typeを「mixi OpenID」に対応

mixi OpenIDが始まったので,MTの対応をwktkしていたわけですが,即日対応とはやりおるわ.OpenIDファウンデーションは名ばかりじゃないってことですね.というわけで,超高速で対応してみた.誰か,mixiでコメント付けてみてくれぃ!

関連:
速報、1500万人が使える mixi OpenID の技術面を解説するでござるの巻 - Yet Another Hackadelic

200808201846追記:
ちょwww.mixiなidが表示されてるからwww.これはまずいwww.コメントテストしたけど,消しますorz.

nicknameがSREGから取得されます.urlにmixiのidがばっちり入ってます.

7月5日に東銀座の時事通信ホールで開催されたWASForum Conference 2008の2日目,Developers Dayに参加してきた.Developerじゃないのに,空気を読まずに参加してきた.WASはWeb Application Securityの略であり,申込がhttpでhttpsでもオレオレ証明書でもなかった辺りが,壮絶な罠というか,釣りというか,丸腰だったのだろう.

・EV SSLの意義と課題
IE7とFirefox3とOpera9.5的にEV SSLが使えるようになって,アドレスバーが緑になるよ!って流行ってるけど,裏側では色々あるんだよ,っていう話.興味深い.

SSLの問題点として,「鍵マークがあるから安心」というところがあり,暗号化されているから安全だという勘違いが根強くあるらしい.ありそうだもんなぁ.通信路が暗号化されるだけであり,そこをついて,フィッシングされちゃうよという現実がある.

EV SSLの課題もいくつか挙げられていて,その中で特に気になったのが,モバイル対応.日本のインターネットはモバイル端末からのアクセスが多いという特殊な状況下であるので,それをどげんかせんといかん.古い携帯端末だと,RSA2048bitが使えないらしい.暗号アルゴリズム世代交代の移行期限が2010年とか2013年だから,しっかりやらないとガラパゴス化しちゃうのかなぁって思ってみました.日本の携帯事情って,やっぱり特殊.というか,携帯に限らず,組み込み機器はちゃんとなんとかしないとね.

・SQLインジェクション対策再考
徳丸さんの日記を整理した感じ.冒頭にも述べたが,Developerでもないのに参加しているため,話について行けないことが度々.話として聞く分には問題ないんだけど,笑うポイントがわからない・・・.SQLインジェクション対策で「走るコードか試したのか?」のような文言があったと思うが,そこが笑いどころだったと思うんだけど,誰も笑わなかったのは高度な罠だったのだろうか.スライド上に示されるいくつものコードが走らないものだったはずなんだが・・・.オレ,釣られてる?なお,ライオンエスケープはこちら

・携帯電話向けWebのセキュリティ
LT的なノリ.技術屋さんのプレゼンって,なんでああいう感じが多いんだろう.畳みかけるって重要なのかな.わかったことは,自転車はGIANTで,携帯ユーザのパスワードが大変なことになっていることくらい.パスワード?はぁ?なにそれ?おいしいの?(スイーツ笑)状態らしい.恐ろしい・・・.でも,すごい人はすごいらしく,8桁程度のチェックデジットは総当たりしてくるらしい.しかも,当たり前のようにw.恐ろしい・・・.その労力を勉強には向けられないのだろうか・・・.

・OpenIDのセキュリティ
ZIGOROuさんのブログをまとめた感じ.資料が公開されています.ありがとうございます.特に真新しい情報はなかったかなと.残念.ブラックリストが愚作というのは全くの同意.ブラックリストの方針だと,新しいドメインをじゃんじゃん取ってくる攻撃者に全く持って無力.ログアウトの話はそんなに重要なんだろうか.そうなってくると,SSO的なシイングルサインオンとシングルログアウトになりそうな・・・.それ,OpenSSO.

それとこうしたイベントで毎回プロトコルの説明をせざるを得ないのも問題だと思いました。

WASForum Conference 2008 での OpenID のセキュリティについてのスライドを公開します - Yet Another Hackadelic

と述べられていますが,果たしてあの説明が必要だったのでしょうか.個人的には3者モデルを出して,これとこれがこうでこうですよと図解すれば,それで十分だったんじゃないかと思います.細かい用語を正確に教えてあげる必要はなくて,どうせ興味を持った人は後で調べるんだろうから,広く万人が理解できるような図解が良いんではないかと思いました.まる

完全に現実逃避気味.科研費めんどくせ><.

どうも土曜日にOpenID勉強会なるものが開催されていたらしく,大変羨ましく思う.アイデンティティ飲み会も羨ましい.「じゃぁ,呼んだらお前くるんか?」と言われると,人見知り恥ずかしがり屋挙動不審のオレは何か予定がありそうなことを仄めかしながら,逃げるというチキン加減を発動させると思います.1人でも知り合いがいれば・・・><.

まぁ,そんなオレのヘタレ加減を力説しても仕方がないので,本題.むしゃくしゃして,インスパイアされて,i-nameを取得してみた.カッとなってやった.別に反省していない.

http://xri.net/@id*yocchan

っていう紹介の仕方でいいのかな?あとは

http://xri.net/@id*yocchan/(+index)

が転送サービスの一覧?なんだか,本当によくわかってないんです.ダメな子なんですね?わかります.

関連:
XRIのリンク集 - Yet Another Hackadelic
無料で使えるCommunity i-nameプロバイダ - Yet Another Hackadelic
i-nameを取得しました - blog.katsuma.tv

このブログではMT4.1を利用しているため,様々な方法での認証が可能となっています.コメントを書くにあたっては,従来通り,メールアドレスを利用した匿名による投稿の他に,OpenIDによる認証とHatenaIDによる認証を可能としています.

また,MT4.1は標準でCaptcha機能を搭載しているので,採用しています.reCaptchaも登録はしているので,標準機能で力不足の場合は,投入します.

皆様,どしどしとコメントをお寄せ下さい.

プロフィール

e-m@il @ddress