OpenIDつついていたり
OpenID RP的なものを作ってみたりしているけどここにソース載せていったりするのもどうだろうか。 そこまでするのも面倒か。 OpenID OPのURLを短く入力してやるとログインできるdiscoveryという仕組みなところをつくっていく。 discoveryではURLからOPのEndPointを探すのがお仕事。JavaではURLクラスがあるのだけど国際化ドメイン名やURLエンコード的なものは個別にかけてやらないといけないのでどの程度にするか悩み。あとは短めのURLを入力してリダイレクトしていくのでなんとなくHTTPもほしいところだけを実装してみる。 漢字等々が混じったURLをHTTP用に成形するのはこんなかんじにしてみた。一般的なURLに使えるでせう。 (Java) public static URI parseURI(String src) throws MalformedURLException, UnsupportedEncodingException, URISyntaxException { URL url = new URL(src); String path = url.getPath().isEmpty() ? "/" : URLDecoder.decode(url.getPath(), "utf-8"); URI uri = new URI(url.getProtocol(), url.getUserInfo(), IDN.toASCII(url.getHost()), url.getPort(), path, url.getQuery(), url.getRef()).normalize(); return new URI(uri.toASCIIString()); } リダイレクトするのはHTTPのリダイレクトの他、OpenIDはYadisプロトコルというのがあるそうな。HTTPで探す部分だけにしておく。 XRDSにたどり着ければここは完成。HTMLの中に書くのはパースが大変そうなのでとりあえず略。 Googleの場合は手がかりがない