日向夏特殊応援部隊

俺様向けメモ

続・モバイル用の OpenID 考

ちょうど今日、有志でモバイル用 OpenID について議論してきたので気分転換に。

の続きです。

ニーズの話

OP 側の視点がメインです。但し一方的に OP だけにシナジーがあっても使われる訳が無いので RP にもメリットがあるといいねという感じで考察してみます。

SSO システムとしての OpenID

前はニーズについては触れなかった。認証の簡略化という意味で端末IDは現実的に使われていて、仮に異なるサービス間だとしてもその端末IDさえ何らかの形で共有出来れば同一IDでのSSOは実現出来る。

それが自社内の異なるコンテンツならばまったく問題は無いけど、異なる会社の異なるサービスでと言う場合には端末IDの共有でSSOと言う話は余り聞かない気がする。
まぁそれはそれ以上のシナジーが無いからなんだろうなと思う。

URL ベースのサービスディスカバリ

やはりこの点が一番期待出来る点なのかなと。

OP Local Identifier は URL であり、また通常その URL に大してディスカバリをかける事によって、その URL からたどれるサービスを利用出来る。

属性交換もそうだし、将来的には Portable Contacts なども利用出来るような世界になるんだろう。それ以外にも OP 上のプラットフォームを最大限利用した RP を作れば、ミニマムのウェブアプリ、特に作りたい物に特化して通知などは全部 OP のプラットフォーム任せなシステムとかありえるのかなと。

あるいは課金サービスもキャリアのそれに頼らず出来るようになれば、モバイル用の OpenID は存在意義があると思われる。

実装

まぁニーズに関しては確実に読めるのはキャリアより割りの良い課金サービスを強力な OP が提供するのが一番だとは思うんだけど、その点はまぁ置いといて。

実装は幾つか方法があるのかなと思います。

POST ベースの実装

一つは POST ベースにしてしまう方法。これは checkid_setup, checkid_immediate, id_res, cancel などの Indirect Communication の際に URL の最大長を超えてしまうような場合、フォームを利用した POST メソッドでやってしまうと言う物。

この場合は何も OpenID の仕様を弄る事無く実装は出来るけど、現実的に見ると今だとアクセスしただけで認証済みとなるような日本のモバイル事情を考えたらあり得ない実現方法だと言える。

端末IDをフルに利用し、尚且つ極力 Indirect Communication に本質的に不要なパラメータを排除し、Direct Communication で補うと言う形が最も現実的な解じゃないのかなと思われる。

OpenID Extension を定義する

日本のモバイル用に新しい Extension を定義するってのはありかもしれない。コンセプトとしては POST を使わずに Redirect ベースで。

今まで OpenID のコアな仕様を弄くらないと実現出来ないかなと思ってたんだけど、

  • checkid_setup or checkid_immediate の時に必要最小限のパラメータに Extension のパラメータつける
    • Extension では収まりきらないパラメータの RP 上での取得先を OP に提示
    • OP は上記の RP 上の URL に問い合わせて収まらなかったパラメータを取得する
  • id_res も必要最小限のパラメータに Extension の応答モードを付与
  • 必ず check_authentication して、その際に再び Extension のパラメータを付与して、id_res で収まらなかった値を取得

みたいな拡張を定義すればいいのかなと。

ちょっとライブラリ側の実装とか仕様上の制約がありそうなので、出来るかどうかは要検証。*1

この辺りは別途日を改めて詳しく検証してみる。

*1:と言うか今ちょっと調べたら id_res の制約がやはり厳しい。