GeekFactory

int128.hatenablog.com

mixiアプリからのリクエストを検証するフィルタ

mixiアプリからのリクエストに対して署名検証を行うサーブレットフィルタを作りました。Apache Tomcatなどのサーブレットコンテナで使用できます。

ではサーブレット内で署名検証を行っていますが、このフィルタを使うとサーブレット内の実装が不要になります。

必要なもの

最新のバージョンは0.3です。

バージョン リリース日 ダウンロード コメント
0.1 2010/1/10 oauth-filter-0.1.jar 最初のリリース。
0.2 2010/1/10 oauth-filter-0.2.jar ValidationEventListenerの仕様を変更しました。
0.3 2010/1/16 oauth-filter-0.3.jar リバースプロキシ対応のValidationEventListenerを追加しました。
ServletRequestからURLを組み立てる際のバグを修正しました。

プロジェクトは opensocial-oauth-filter - Signature validation filter for OpenSocial server-side application - Google Project Hosting に移動しました。


使い方

ビルドパスにjarを追加します。Google App Engineプロジェクトの場合はwar/WEB-INF/libに追加します。

そして、web.xmlに以下を記述します。

<webapp>
    <filter>
        <filter-name>oauth-filter</filter-name>
        <filter-class>org.hidetake.util.oauth.OAuthValidationFilter</filter-class>
        <init-param>
        	<param-name>net.oauth.OAuthAccessor</param-name>
        	<param-value>org.hidetake.util.oauth.provider.MixiOAuthAccessor</param-value>
        </init-param>
        <init-param>
        	<param-name>org.hidetake.util.oauth.ValidationEventListener</param-name>
        	<param-value>org.hidetake.util.oauth.listener.ValidationEventLogger</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>oauth-filter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</webapp>

mixiアプリからフィルタを通してアクセスすると、下記のログが出力されます。

2010/01/10 6:37:23 org.hidetake.util.oauth.listener.ValidationEventLogger manipulateURL
情報: OAuth message URL: http://example.com/test
2010/01/10 6:37:23 org.hidetake.util.oauth.listener.ValidationEventLogger onValidationComplete
情報: Validation complete

署名検証に失敗した場合は下記のログが出力されます。

2010/01/10 6:59:35 org.hidetake.util.oauth.listener.ValidationEventLogger manipulateURL
情報: OAuth message URL: http://example.com/test
2010/01/10 6:59:35 org.hidetake.util.oauth.listener.ValidationEventLogger onOAuthException
警告: Validation failed: parameter_absent

カスタマイズ

org.hidetake.util.oauth.ValidationEventListenerを実装すると、以下のイベントで好きな処理を実行できます。

  • manipulateURL: 署名検証に渡すURLを変更したいとき
  • onValidationComplete: 署名検証に成功したとき
  • onOAuthException: 署名検証に失敗したとき
  • onURISyntaxException: 署名検証に失敗したとき

web.xmlのValidationEventListenerはカンマ区切りで複数定義できます。

<init-param>
	<param-name>org.hidetake.util.oauth.ValidationEventListener</param-name>
       	<param-value>org.hidetake.util.oauth.listener.ValidationEventLogger,org.example.TestListener</param-value>
</init-param>

web.xmlのOAuthAccessorを変更することで、mixiアプリ以外のOpenSocialコンテナにも対応できます。