Wicketで始めるオブジェクト指向ウェブ開発

第9回 WicketによるOAuth認証

この記事を読むのに必要な時間:およそ 10 分

AccessTokenの保存

AccessTokenは(少なくとも現状のTwitterでは)発行後に期限切れすることがありません。ということは,AccessTokenをデータベースなどに永続化しておけば,次回は認証の手続きを踏むことなく永続化したAccessTokenを使ってTwitterオブジェクトを生成できるということです。

そのため,AccessTokenの漏洩には特に注意しなければなりません。AccessTokenさえ手に入れば,ユーザ認証を経ることなくTwitterアカウントにアクセスできるのです。リクエスト・パラメータやCookieを介してAccessTokenを扱うのは危険でしょう。また,ログインせずにアクセスできるところにAccessTokenを保存するのも危険でしょう。

データベースにAccessTokenを保存した場合は,あなたのアプリケーションにログインしない限りはAccessToken情報を取り出せないようにしたほうが良いでしょう。

AccessTokenはユーザがいつでも無効にすることができます。ユーザがアプリケーションへの許可を取り消すと,取得したAccessTokenではTwitterにアクセスできなくなります。今回のプログラムでは許可が取り消された場合の処理は行っていないので,取り消し後の処理はすべてエラーになってしまいます。

皆さんの手で,許可が取り消されてエラーになった場合にはOAuth認証を再度行うように,プログラムを作り変えてみてください。

ヒントを1つだけ。認証失敗した場合にはTwitterExceptionがスローされ,TwitterExceptionのgetStatusCode()メソッドはHTTPステータスコード401(Unauthorized)を返します。

LoginProcessorとURLを結びつける

TwitterをLoginProcessorにリダイレクトさせるには,LoginProcessorをURLと結びつけ,外部からアクセス可能にしなければなりません。

方法は簡単です。LoginProcessorを生成するLoginProcessorUrlCodingStrategyを,ページと同じようにURLに「マウント」します。

リスト7 UrlCodingStrategyのマウント

mount(new LoginProcessorUrlCodingStrategy("/login"));

すべてのIRequestTargetUrlCodingStrategyインタフェース実装クラスは,Applicationのmount()メソッドによってURLと結びつけることができます。ページをURLと結びつけるmountBookmarkablePage()メソッドは,内部ではBookmarkablePageRequestTargetUrlCodingStrategyというIRequestTargetUrlCodingStrategy実装クラスをマウントしています。ページも,IRequestTargetUrlCodingStrategyとIRequestTargetを使って処理されているのです。

WicketのURL制御にはほかにもいくつか機能がありますが,もっとも基本となるのは,これら2つのインタフェースです。すべてのアクセスは一旦これら2つのインタフェースを経由します。

ページに何かを表示するならばPageやPanelを,URLアクセスに対してデータを返却するならば,第5回で使用したWebResourceを使うと良いでしょう。それらでは取り扱えない,⁠URLアクセスによってただプログラムが動く」というケースでは,今回のように独自のIRequestTargetUrlCodingStrategyとIRequestTargetを作成することで対応することができます。

Webアプリケーションが外部とやり取りする最も基本的な要素は,URLです。IRequestTargetUrlCodingStrategyとIRequestTargetは,URLという文字情報と,Wicketのオブジェクトの世界の橋渡しを行います。この2つはURLを直接扱うので,Wicketらしいオブジェクトをベースにしたプログラムに比べて,幾分抽象化されていない印象を受けるでしょう。この2つのインタフェースが,外部とWicketの世界の境界だからです。

2つのインタフェースの使い方を理解すれば,Wicketでできることがぐっと広がるでしょう。

さらにWicketを知る

この連載では,Wicketのキーとなる要素について,Twitterアプリケーションを実装する中で触れてきました。かなり広範囲の概念を紹介しましたが,記事の文字数の関係から,個々の概念を深く掘り下げることはできていません。

個々の概念について,Wicketが提供する機能を知りたいのであれば,本記事からもリンクされている拙著をお読みいただければと思います。

Wicketでアプリケーションを作成している中で疑問が出てきて質問したくなった場合は,Wicketユーザグループ(wicket-ja)のメーリングリストに質問を投稿すると良いでしょう。

本連載でWicketに興味を持っていただければ幸いです。

それでは,Wicketでプログラミングを楽しんでください。

著者プロフィール

矢野勉(やのつとむ)

フリーランスのプログラマ。Wicket-ja主催。

ウェブ・アプリケーションの開発を中心にさまざまな案件に関わってきました。現在はWicketによる開発を支援しています。

URLhttp://d.hatena.ne.jp/t_yano/

著書

コメント

コメントの記入