T2サンプルでOpenIDを使ったサンプルを追加しました
OpenIDの仕組みに興味が会ったので、T2でOpenIDを使った認証のサンプルを作りました。
OpenIDのリクエスト部分としては、openid4javaを使いました。
今のところ一番簡易な認証だけなので、本当はもう少しやり取りが必要かもしれませんが
少なくともWebフレームワークなんだし、OpenIDとのインテグレーション入れてみようと思った次第です。
サンプルを一番下にはります。
authenticateRequestメソッドがユーザから呼び出されるメソッドです。
わたってくるパラメータはOpenIDの認証先です。例えば、myname.openid.ne.jpみたいな感じ。
authenticateRequestメソッドの中ではOpenIdの認証局に行ったあとのコールバックする先を指定します。
ttp://localhost:8080/t2-samples/openid/acceptのようなURLにコールバックして欲しいので
下記のようにします。
それがauthenticateRequestメソッドの下記の部分です。
String returnToUrl = request.getRequestURL().append("/accept")
.toString();
ttp://localhost:8080/t2-samples/openid/acceptに対応するPageクラスのアクションメソッドを作ります。
メソッドはURLにそのままひもづかせたいので、acceptメソッドとして、以下のような感じになります。
OpenIDからのコールバックの結果をverifyResponseメソッドで検査してます。
@GET @ActionPath public Navigation accept(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { Identifier identifier = null; try { identifier = this.verifyResponse(req); } catch (OpenIDException ex) { logger.debug(ex.getMessage()); } logger.debug("identifier: " + identifier); if (identifier == null) { return Forward.to("/jsp/openid.jsp"); } else { req.setAttribute("identifier", identifier.getIdentifier()); return Forward.to("/jsp/openidResult.jsp"); } }
重要なのは、verifyResponseメソッドで呼び出しているConsumerManager#verify(String receivingUrl, ParameterList response, DiscoveryInformation discovered)です。
こいつで実際にOpenIDで接続許可がとれたかどうか、その認証は期限内かどうかなどを見ています。
もっと突き詰めていけば色々出来そうですが、T2のリリースも迫っているのでこの辺にしておきます。
また今度見直してみます。
ソース全文は下記からどうぞ。
続きを読む