Simple Web Discoveryとは
Simple Web Discovery (SWD) defines a HTTPS GET based mechanism to
draft-jones-simple-web-discovery-00 - Simple Web Discovery (SWD)
discover the location of a given type of service for a given
principal starting only with a domain name.
OpenID Auth 2.0(not OAuth 2.0)では、YadisというDiscoveryのしくみを利用しています。
今、策定されているOpenID ABCでは、新たにこのSWDによってOP Endpointやその他のLocationを取得するようになります。
http://lists.openid.net/pipermail/openid-specs-ab/Week-of-Mon-20110411/000352.html
4行で説明してもよくわからない
テストツールを使って流れを体験
実際にSWDのリクエストを送ってみるテストツールを用意しました。
http://swdtool.phper.jp/swd.php
とはいえどこもSWDに対応してるサービスなんてないので、自分のレンタルサーバにサンプルレスポンスを返すように実装しました。
OP選択→SWDによりOP Endpoint取得
OpenID 2.0でYahoo!を使う!mixiを使う!って選択したときのユースケースですね。
principalにOPのhostnameが指定されます。
SWDパラメータ
- principal : r-weblife.sakura.ne.jp
- host : r-weblife.sakura.ne.jp
- service : http://openid.net/specs/cc/1.0/op
SWDエンドポイントへのリクエスト
URL :
https://r-weblife.sakura.ne.jp/.well-known/simple-web-discovery?
principal=r-weblife.sakura.ne.jp&
service=http%3A%2F%2Fopenid.net%2Fspecs%2Fcc%2F1.0%2Fop
レスポンス
{
"location":
["https://r-weblife.sakura.ne.jp/swd/op"]
}
メールアドレス→SWDによりOP Endpoint取得
WebFingerのように、EmailからのDiscoveryで使うこともできます。
principalにユーザーのEmailが指定されます。
SWDパラメータ
- principal : [email protected]
- host : r-weblife.sakura.ne.jp
- service : http://openid.net/specs/cc/1.0/op
SWDエンドポイントへのリクエスト
URL :
https://r-weblife.sakura.ne.jp/.well-known/simple-web-discovery
?principal=user%40r-weblife.sakura.ne.jp
&service=http%3A%2F%2Fopenid.net%2Fspecs%2Fcc%2F1.0%2Fop
レスポンス
{
"location":
["https://r-weblife.sakura.ne.jp/swd/op"]
}
Identity URL→SWDによりOP Endpoint取得
OpenID 1.0時代から使われている、ユーザーが自分を特定するURIを指定して、そこからエンドポイントを取得することも可能です。
SWDパラメータ
- principal : https://r-weblife.sakura.ne.jp/user
- host : r-weblife.sakura.ne.jp
- service : http://openid.net/specs/cc/1.0/op
SWDエンドポイントへのリクエスト
URL :
https://r-weblife.sakura.ne.jp/.well-known/simple-web-discovery
?principal=https%3A%2F%2Fr-weblife.sakura.ne.jp%2Fuser
&service=http%3A%2F%2Fopenid.net%2Fspecs%2Fcc%2F1.0%2Fop
レスポンス
{
"location":
["https://r-weblife.sakura.ne.jp/swd/op"]
}
最後にもうひとつ、リダイレクトする場合を見てみましょう。
別のSWDエンドポイントにリダイレクトしてから取得
SWDパラメータ
- principal : [email protected]
- host : r-weblife.sakura.ne.jp
- service : http://openid.net/specs/cc/1.0/op
SWDエンドポイントへのリクエスト
https://r-weblife.sakura.ne.jp/.well-known/simple-web-discovery
?principal=redirect%40r-weblife.sakura.ne.jp
&service=http%3A%2F%2Fopenid.net%2Fspecs%2Fcc%2F1.0%2Fop
別のエンドポイントへのリダイレクトを意味するレスポンス
{ "SWD_service_redirect":
{"location":"https://r-weblife.sakura.ne.jp/swd/swd_server.php"}
}
リダイレクト先のSWDエンドポイントへのリクエスト
https://r-weblife.sakura.ne.jp/swd/swd_server.php
?principal=redirect%40r-weblife.sakura.ne.jp
&service=http%3A%2F%2Fopenid.net%2Fspecs%2Fcc%2F1.0%2Fop
レスポンス
{
"location":
["https://r-weblife.sakura.ne.jp/swd/op"]
}
どうでしょう。シンプルな実装ですね。
今後、OpenID ABCで使えそうなDelegation,複数同時のDiscoveryなど様々な仕様が策定されていくと思いますので、注目していきましょう。