11
1 Web技術勉強会 第18WebAPI認証の実装 2009/03/21 Ryuichi Tanaka http://blog.livedoor.jp/mapserver2007/

Web技術勉強会 第18回

Embed Size (px)

DESCRIPTION

WebAPIにAPIキー認証を実装する方法

Citation preview

Page 1: Web技術勉強会 第18回

1

Web技術勉強会第18回~WebAPI認証の実装~

2009/03/21

Ryuichi Tanakahttp://blog.livedoor.jp/mapserver2007/

Page 2: Web技術勉強会 第18回

2

WebAPIとは

& WebAPIとは?

' REST(GET,POST)形式で提供されるのが一般的

' レスポンスはXML、JSON/JSONP、Javascriptコード、

画像を返すなどさまざま今回はJSON/JSONPベースى

' WebAPIを実装しよう今回の話はWebAPIがすでに作れるor作ったが前提ى

Page 3: Web技術勉強会 第18回

3

認証をしよう

& WebAPIには認証がかかっているタイプがある

' ex: Yahoo!、楽天、Amazon、Google etc.

& 自作したWebAPIをセキュアにしよう

' もろにアクセスされるのはちょっと嫌

& どのような仕様が一般的?' 「APIキー」を作って認証がほとんど

Page 4: Web技術勉強会 第18回

4

認証の仕様

& APIキーを作る

' SHA2(Secure Hash Algorithm)を利用ى MD5、SHA1よりSHA2(SHA-224、SHA-256、SHA-384、

SHA-512)のほうがよりセキュア

どんな文字列からでも固定長のハッシュを生成ى

' Perl実装のDigest::SHAを利用。自作WebAPIはPerlなのでى

ى PHPではSHA2関数はない(mhashを使うといける)

Page 5: Web技術勉強会 第18回

5

認証の仕様

& リファラを見る

' リファラを使って、使用を許可するページを制限今回の仕様では、ドメイン単位で許可ى

& タイムスタンプを使う' リファラ+タイムスタンプでSHA2ハッシュを作る

ى リファラとハッシュが一致したときに認証が成功とみなす

ى リファラが仮に偽装された場合でも、ハッシュ値が分からない限りアクセスはできない

Page 6: Web技術勉強会 第18回

6

実装

& APIキー認証を実装

APIキー登録画面

DB

・APIを許可するURL

・タイムスタンプ

APIを適用するページ

API

API

キー認証キー認証キー認証キー認証

認証

認証OK

認証NG

レスポンス

リクエスト認証処理

Page 7: Web技術勉強会 第18回

7

実装

& APIキー登録処理はPHPで実装' diarysys4の管理画面に組み込み

' ApiKeyクラスの実装、テンプレートファイルの作成を新規作成、入力データのバリデーションはCommonクラスの処理のそのまま

継承

& APIキー認証処理はPerlで実装' どのプロジェクトに属するAPIでも認証がかけられるようにするようにモジュールを配置(FindBin::libs)

' リクエストパラメータに「apikey」属性を追加

' リファラはCGIのreferer()で取得

Page 8: Web技術勉強会 第18回

8

サンプル

http://team2.de.c.dendai.ac.jp/study/20090321/apiauth.html

認証失敗時 認証成功時

Page 9: Web技術勉強会 第18回

9

登録画面

Page 10: Web技術勉強会 第18回

10

Todo(★は優先度)

& ★★Diarysys4関連(進捗95%、データ移行中)

' Widgetリファクタリング

' WidgetのAPIキー認証対応

' iGoogleウィジェット対応?(公開する予定なし)

' WidgetのShindig化

& ★TMAP関連(進捗99%)

' バグフィックス(いくつかバグを確認)

& ★★★ChocoLab関連(進捗1%)

' Ruby on Railsで構築予定

' 開発環境・サーバ環境構築(RadRails設定完了)

Page 11: Web技術勉強会 第18回

11

Todo(★は優先度)

& ★インフラ関連(進捗80%)

' UTF-8移行プロジェクト(完了)

' Trac導入(未定)

' Subversionコミットメール(未定)

' Toritton(未定)

& ★★ドキュメント作成(進捗90%)

' 自宅サーバセットアップマニュアル(1版完成)

' 開発環境セットアップマニュアル(未定)

' はてなグループ更新

& ★障害対応(随時)