//
表示中
Computer - コンピューター

本日の夜の部の作業


昨日はApacheのHttpClientライブラリを使って、独自のHTTPライブラリクラスを実装しました。
今日はそれを使ってOAuthによる認証の仕組みをAribaWebフレームワークに組み込んでいきます。

この認証の仕組みは、

  1. アプリケーションのトップページを表示するリクエストが来たときに、アクセストークンを保持していない場合は、認証サーバーにリクエストコードを使って認証要求をPOSTします。
  2. 認証サーバーはPOSTされたFORMデータに含まれているリダイレクトURL(同一アプリケーション内にリクエストハンドラーがある)にJSON形式の認証情報を送信します。
  3. アプリケーションは認証情報を解析分解してアクセストークンやユーザー情報をセッションに保持して、アプリケーションのトップページにリダイレクトします。
  4. アクセストークンを保持した状態ならば、アプリケーションのトップページが表示されます。

ここまでの流れがエラーなく実行できると認証が成功したことになります。

画像は3の部分のコードの一部です。


AribaWebの場合は、1の部分はトップページとして表示されるコンポーネントのrenderResponseメソッドをオーバーライドして、アクセストークンの有無によってそのコンポーネントのレンダリングを行うか、認証サーバーへのリダイレクトを行うかを決めます。AWSessionのサブクラスでやった方がいいかも。リダイレクトを行うにはAWRedirectクラスを使います。(昨日ソースを読んでわかった)

2の部分は認証サーバー側の仕事。

3の部分はAWDirectActionのサブクラスの中のアクションハンドラーの中で実行します。認証に失敗したときにはエラーページにリダイレクトするような作りになると思います。エラーページは開発するアプリケーション毎に設定できるようにします。

これらの機能を抽象クラスで実装しておいて、新規アプリケーションを開発するときはAribaWebのアドオンフレームワークとして利用すれば、OAuth認証機能の詳細を気にせずにOAuth機能を持ったアプリケーションを容易に開発できます。
AribaWebビューコンポーネントからデータベースアクセスまでの機能を持ったフルスタックのフレームワークです。他のフレームワークはビューはこれ、データベースアクセスはこれ、みたいに1つのアプリケーションの中でフレイバーの違ういくつものフレームワークやライブラリを混ぜて使うものが多いです。そういうものに比べると組み合わせの妙がない分、若干柔軟性がない感じがしますが、アプリケーションの主要な部分を一貫した書き方で、HTMLやJavaScriptも書かずに行けるところが嬉しいところ。開発も速いですし、フレームワークの資産化がしやすいのも美点。

前職では1人で金融機関のアプリケーションを短期間に何本も開発するなんていうことをしていましたが、それはAribaWebのおかげです。

AribaWebの祖先はNeXTのWebObjectsで、設計がとても良く似ています。
日本ではほとんど利用者がいないようで、日本語の参考記事をネットで見る機会がまったくありません。オープンソースだからソースを見ろ!っていう話ですが、大きなフレームワークなので、ザッと見てもよくわからないかもしれません。WebObjectsを知っている人なら簡単かな。

kazz12211 について

Working as a OO programmer and enjoying music, bicycle and photography.

ディスカッション

コメントはまだありません。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

手仕事日記

評価

ブログ統計

  • 515,370 ヒット

カテゴリー

アーカイブ

カレンダー

2016年10月
« 9月   11月 »
 1
2345678
9101112131415
16171819202122
23242526272829
3031  
%d人のブロガーが「いいね」をつけました。