Upload
ryuichi-tanaka
View
2.196
Download
6
Embed Size (px)
DESCRIPTION
WebAPIにAPIキー認証を実装する方法
Citation preview
1
Web技術勉強会第18回~WebAPI認証の実装~
2009/03/21
Ryuichi Tanakahttp://blog.livedoor.jp/mapserver2007/
2
WebAPIとは
& WebAPIとは?
' REST(GET,POST)形式で提供されるのが一般的
' レスポンスはXML、JSON/JSONP、Javascriptコード、
画像を返すなどさまざま今回はJSON/JSONPベースى
' WebAPIを実装しよう今回の話はWebAPIがすでに作れるor作ったが前提ى
3
認証をしよう
& WebAPIには認証がかかっているタイプがある
' ex: Yahoo!、楽天、Amazon、Google etc.
& 自作したWebAPIをセキュアにしよう
' もろにアクセスされるのはちょっと嫌
& どのような仕様が一般的?' 「APIキー」を作って認証がほとんど
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を使うといける)
5
認証の仕様
& リファラを見る
' リファラを使って、使用を許可するページを制限今回の仕様では、ドメイン単位で許可ى
& タイムスタンプを使う' リファラ+タイムスタンプでSHA2ハッシュを作る
ى リファラとハッシュが一致したときに認証が成功とみなす
ى リファラが仮に偽装された場合でも、ハッシュ値が分からない限りアクセスはできない
6
実装
& APIキー認証を実装
APIキー登録画面
DB
・APIを許可するURL
・タイムスタンプ
APIを適用するページ
API
API
キー認証キー認証キー認証キー認証
認証
認証OK
認証NG
レスポンス
リクエスト認証処理
7
実装
& APIキー登録処理はPHPで実装' diarysys4の管理画面に組み込み
' ApiKeyクラスの実装、テンプレートファイルの作成を新規作成、入力データのバリデーションはCommonクラスの処理のそのまま
継承
& APIキー認証処理はPerlで実装' どのプロジェクトに属するAPIでも認証がかけられるようにするようにモジュールを配置(FindBin::libs)
' リクエストパラメータに「apikey」属性を追加
' リファラはCGIのreferer()で取得
8
サンプル
http://team2.de.c.dendai.ac.jp/study/20090321/apiauth.html
認証失敗時 認証成功時
9
登録画面
10
Todo(★は優先度)
& ★★Diarysys4関連(進捗95%、データ移行中)
' Widgetリファクタリング
' WidgetのAPIキー認証対応
' iGoogleウィジェット対応?(公開する予定なし)
' WidgetのShindig化
& ★TMAP関連(進捗99%)
' バグフィックス(いくつかバグを確認)
& ★★★ChocoLab関連(進捗1%)
' Ruby on Railsで構築予定
' 開発環境・サーバ環境構築(RadRails設定完了)
11
Todo(★は優先度)
& ★インフラ関連(進捗80%)
' UTF-8移行プロジェクト(完了)
' Trac導入(未定)
' Subversionコミットメール(未定)
' Toritton(未定)
& ★★ドキュメント作成(進捗90%)
' 自宅サーバセットアップマニュアル(1版完成)
' 開発環境セットアップマニュアル(未定)
' はてなグループ更新
& ★障害対応(随時)