SlideShare una empresa de Scribd logo
1 de 11
Descargar para leer sin conexión
Web技術勉強会 第18回
   ~WebAPI認証の実装~


                           2009/03/21
                        Ryuichi Tanaka
       http://blog.livedoor.jp/mapserver2007/



                                                1
WebAPIとは
WebAPIとは?
 REST(GET,POST)形式で提供されるのが一般的
 レスポンスはXML、JSON/JSONP、Javascriptコード、
 画像を返すなどさまざま
  ‫ ى‬今回はJSON/JSONPベース
 WebAPIを実装しよう
  ‫ ى‬今回の話はWebAPIがすでに作れるor作ったが前提




                                       2
認証をしよう
WebAPIには認証がかかっているタイプがある
 ex: Yahoo!、楽天、Amazon、Google etc.
自作したWebAPIをセキュアにしよう
 もろにアクセスされるのはちょっと嫌
どのような仕様が一般的?
 「APIキー」を作って認証がほとんど




                                    3
認証の仕様
APIキーを作る
 SHA2(Secure Hash Algorithm)を利用
  ‫ ى‬MD5、SHA1よりSHA2(SHA-224、SHA-256、SHA-384、
    SHA-512)のほうがよりセキュア
  ‫ ى‬どんな文字列からでも固定長のハッシュを生成
 Perl実装のDigest::SHAを利用
  ‫ ى‬自作WebAPIはPerlなので。
  ‫ ى‬PHPではSHA2関数はない(mhashを使うといける)




                                              4
認証の仕様
リファラを見る
 リファラを使って、使用を許可するページを制限
 ‫ ى‬今回の仕様では、ドメイン単位で許可
タイムスタンプを使う
 リファラ+タイムスタンプでSHA2ハッシュを作る
 ‫ ى‬リファラとハッシュが一致したときに認証が成功とみなす
 ‫ ى‬リファラが仮に偽装された場合でも、ハッシュ値が分からない
   限りアクセスはできない



                                  5
実装
   APIキー認証を実装
                                            API
          レスポンス
                              認証OK

                                         ・APIを許可するURL
                             認証
                                         ・タイムスタンプ
              リクエスト
                                  認証処理

              認証NG
                                                    APIキー登録画面
                       API
APIを適用するページ           キー認証

                                   DB

                                                            6
実装
APIキー登録処理はPHPで実装
 diarysys4の管理画面に組み込み
 ApiKeyクラスの実装、テンプレートファイルの作成を新規作成、
 入力データのバリデーションはCommonクラスの処理のそのまま
 継承
APIキー認証処理はPerlで実装
 どのプロジェクトに属するAPIでも認証がかけられるようにするよ
 うにモジュールを配置(FindBin::libs)
 リクエストパラメータに「apikey」属性を追加
 リファラはCGIのreferer()で取得


                                    7
サンプル
http://team2.de.c.dendai.ac.jp/study/20090321/apiauth.html




        認証失敗時                                      認証成功時


                                                             8
登録画面




       9
Todo(★は優先度)
★★Diarysys4関連(進捗95%、データ移行中)
 Widgetリファクタリング
 WidgetのAPIキー認証対応
 iGoogleウィジェット対応?(公開する予定なし)
 WidgetのShindig化
★TMAP関連(進捗99%)
 バグフィックス(いくつかバグを確認)
★★★ChocoLab関連(進捗1%)
 Ruby on Railsで構築予定
 開発環境・サーバ環境構築(RadRails設定完了)

                              10
Todo(★は優先度)
★インフラ関連(進捗80%)
 UTF-8移行プロジェクト(完了)
 Trac導入(未定)
 Subversionコミットメール(未定)
 Toritton(未定)
★★ドキュメント作成(進捗90%)
 自宅サーバセットアップマニュアル(1版完成)
 開発環境セットアップマニュアル(未定)
 はてなグループ更新
★ 障害対応(随時)

                          11

Más contenido relacionado

La actualidad más candente

生態学における FOSS4G利用の最前線 ~開催趣旨説明~
生態学におけるFOSS4G利用の最前線 ~開催趣旨説明~生態学におけるFOSS4G利用の最前線 ~開催趣旨説明~
生態学における FOSS4G利用の最前線 ~開催趣旨説明~IWASAKI NOBUSUKE
 
Visio Webマーケティングの基本
Visio Webマーケティングの基本Visio Webマーケティングの基本
Visio Webマーケティングの基本nekosuke
 
20080706_ecogeek_lt
20080706_ecogeek_lt20080706_ecogeek_lt
20080706_ecogeek_ltid774
 
HCCソフト会社紹介
HCCソフト会社紹介HCCソフト会社紹介
HCCソフト会社紹介ssusercbaf23
 
モバイルでIRCを活用する with EbIRC
モバイルでIRCを活用する with EbIRCモバイルでIRCを活用する with EbIRC
モバイルでIRCを活用する with EbIRCShin Ise
 
Digital contents -midterm-
Digital contents -midterm-Digital contents -midterm-
Digital contents -midterm-jeong son
 
[12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発
[12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発[12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発
[12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発Yuichi Tanaka
 
웹20시대의정보검색과전략(Keris)
웹20시대의정보검색과전략(Keris)웹20시대의정보검색과전략(Keris)
웹20시대의정보검색과전략(Keris)POSTECH Library
 
CSNagoya コンパイラを作ろう
CSNagoya コンパイラを作ろうCSNagoya コンパイラを作ろう
CSNagoya コンパイラを作ろうtoyoshi
 
Ohp Seijoen H20 08 Jfreechart
Ohp Seijoen H20 08 JfreechartOhp Seijoen H20 08 Jfreechart
Ohp Seijoen H20 08 Jfreechartsesejun
 
第1回Fレックス研究会PDF版
第1回Fレックス研究会PDF版第1回Fレックス研究会PDF版
第1回Fレックス研究会PDF版Yoichi Tanaka
 
Howtousenetboss
HowtousenetbossHowtousenetboss
Howtousenetbosskumee
 
6 самых простых шагов
6 самых простых шагов6 самых простых шагов
6 самых простых шаговNastenaSalm
 
山行記録共有データベース「ヤマレコ」
山行記録共有データベース「ヤマレコ」山行記録共有データベース「ヤマレコ」
山行記録共有データベース「ヤマレコ」Kazumine Matoba
 
CAPとBASEとEventually Consistent
CAPとBASEとEventually ConsistentCAPとBASEとEventually Consistent
CAPとBASEとEventually ConsistentYohei Yamamoto
 

La actualidad más candente (20)

WebDAV as Web API
WebDAV as Web APIWebDAV as Web API
WebDAV as Web API
 
RDF and FOAF
RDF and FOAFRDF and FOAF
RDF and FOAF
 
生態学における FOSS4G利用の最前線 ~開催趣旨説明~
生態学におけるFOSS4G利用の最前線 ~開催趣旨説明~生態学におけるFOSS4G利用の最前線 ~開催趣旨説明~
生態学における FOSS4G利用の最前線 ~開催趣旨説明~
 
Visio Webマーケティングの基本
Visio Webマーケティングの基本Visio Webマーケティングの基本
Visio Webマーケティングの基本
 
20080706_ecogeek_lt
20080706_ecogeek_lt20080706_ecogeek_lt
20080706_ecogeek_lt
 
Palanju
PalanjuPalanju
Palanju
 
HCCソフト会社紹介
HCCソフト会社紹介HCCソフト会社紹介
HCCソフト会社紹介
 
モバイルでIRCを活用する with EbIRC
モバイルでIRCを活用する with EbIRCモバイルでIRCを活用する with EbIRC
モバイルでIRCを活用する with EbIRC
 
Digital contents -midterm-
Digital contents -midterm-Digital contents -midterm-
Digital contents -midterm-
 
[12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発
[12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発[12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発
[12_B_6] PHP/MySQL を用いた大規模向けパッケージソフトウェア開発
 
웹20시대의정보검색과전략(Keris)
웹20시대의정보검색과전략(Keris)웹20시대의정보검색과전략(Keris)
웹20시대의정보검색과전략(Keris)
 
CSNagoya コンパイラを作ろう
CSNagoya コンパイラを作ろうCSNagoya コンパイラを作ろう
CSNagoya コンパイラを作ろう
 
Ohp Seijoen H20 08 Jfreechart
Ohp Seijoen H20 08 JfreechartOhp Seijoen H20 08 Jfreechart
Ohp Seijoen H20 08 Jfreechart
 
第1回Fレックス研究会PDF版
第1回Fレックス研究会PDF版第1回Fレックス研究会PDF版
第1回Fレックス研究会PDF版
 
Blog and non-for -profit
Blog and non-for -profitBlog and non-for -profit
Blog and non-for -profit
 
okyuu.com x Rails x OpenID
okyuu.com x Rails x OpenIDokyuu.com x Rails x OpenID
okyuu.com x Rails x OpenID
 
Howtousenetboss
HowtousenetbossHowtousenetboss
Howtousenetboss
 
6 самых простых шагов
6 самых простых шагов6 самых простых шагов
6 самых простых шагов
 
山行記録共有データベース「ヤマレコ」
山行記録共有データベース「ヤマレコ」山行記録共有データベース「ヤマレコ」
山行記録共有データベース「ヤマレコ」
 
CAPとBASEとEventually Consistent
CAPとBASEとEventually ConsistentCAPとBASEとEventually Consistent
CAPとBASEとEventually Consistent
 

Más de 龍一 田中

WebSocketでリアルタイム処理をする
WebSocketでリアルタイム処理をするWebSocketでリアルタイム処理をする
WebSocketでリアルタイム処理をする龍一 田中
 
Web技術勉強会 20130525 - Google Cloud Messaging入門
Web技術勉強会 20130525 - Google Cloud Messaging入門Web技術勉強会 20130525 - Google Cloud Messaging入門
Web技術勉強会 20130525 - Google Cloud Messaging入門龍一 田中
 
Web技術勉強会 20120728
Web技術勉強会 20120728Web技術勉強会 20120728
Web技術勉強会 20120728龍一 田中
 
Web技術勉強会 20120609
Web技術勉強会 20120609Web技術勉強会 20120609
Web技術勉強会 20120609龍一 田中
 
Web技術勉強会 20120114 - JenkinsでJava/PHP/Ruby/JavaScriptをビルドする
Web技術勉強会 20120114 - JenkinsでJava/PHP/Ruby/JavaScriptをビルドするWeb技術勉強会 20120114 - JenkinsでJava/PHP/Ruby/JavaScriptをビルドする
Web技術勉強会 20120114 - JenkinsでJava/PHP/Ruby/JavaScriptをビルドする龍一 田中
 
Web技術勉強会 20111112
Web技術勉強会 20111112Web技術勉強会 20111112
Web技術勉強会 20111112龍一 田中
 
Web技術勉強会 20110723
Web技術勉強会 20110723Web技術勉強会 20110723
Web技術勉強会 20110723龍一 田中
 
Web技術勉強会 20110611
Web技術勉強会 20110611Web技術勉強会 20110611
Web技術勉強会 20110611龍一 田中
 
Web技術勉強会 20110528
Web技術勉強会 20110528Web技術勉強会 20110528
Web技術勉強会 20110528龍一 田中
 
Web技術勉強会 20110514
Web技術勉強会 20110514Web技術勉強会 20110514
Web技術勉強会 20110514龍一 田中
 
Web技術勉強会 20100925
Web技術勉強会 20100925Web技術勉強会 20100925
Web技術勉強会 20100925龍一 田中
 
Web技術勉強会 20100424
Web技術勉強会 20100424Web技術勉強会 20100424
Web技術勉強会 20100424龍一 田中
 
Web技術勉強会 第38回
Web技術勉強会 第38回Web技術勉強会 第38回
Web技術勉強会 第38回龍一 田中
 
Web技術勉強会 第37回
Web技術勉強会 第37回Web技術勉強会 第37回
Web技術勉強会 第37回龍一 田中
 
Web技術勉強会 第34回
Web技術勉強会 第34回Web技術勉強会 第34回
Web技術勉強会 第34回龍一 田中
 
Web技術勉強会 第33回
Web技術勉強会 第33回Web技術勉強会 第33回
Web技術勉強会 第33回龍一 田中
 
Web技術勉強会 第31回
Web技術勉強会 第31回Web技術勉強会 第31回
Web技術勉強会 第31回龍一 田中
 
Web技術勉強会 第30回
Web技術勉強会 第30回Web技術勉強会 第30回
Web技術勉強会 第30回龍一 田中
 
Web技術勉強会 第29回
Web技術勉強会 第29回Web技術勉強会 第29回
Web技術勉強会 第29回龍一 田中
 
Web技術勉強会 第28回
Web技術勉強会 第28回Web技術勉強会 第28回
Web技術勉強会 第28回龍一 田中
 

Más de 龍一 田中 (20)

WebSocketでリアルタイム処理をする
WebSocketでリアルタイム処理をするWebSocketでリアルタイム処理をする
WebSocketでリアルタイム処理をする
 
Web技術勉強会 20130525 - Google Cloud Messaging入門
Web技術勉強会 20130525 - Google Cloud Messaging入門Web技術勉強会 20130525 - Google Cloud Messaging入門
Web技術勉強会 20130525 - Google Cloud Messaging入門
 
Web技術勉強会 20120728
Web技術勉強会 20120728Web技術勉強会 20120728
Web技術勉強会 20120728
 
Web技術勉強会 20120609
Web技術勉強会 20120609Web技術勉強会 20120609
Web技術勉強会 20120609
 
Web技術勉強会 20120114 - JenkinsでJava/PHP/Ruby/JavaScriptをビルドする
Web技術勉強会 20120114 - JenkinsでJava/PHP/Ruby/JavaScriptをビルドするWeb技術勉強会 20120114 - JenkinsでJava/PHP/Ruby/JavaScriptをビルドする
Web技術勉強会 20120114 - JenkinsでJava/PHP/Ruby/JavaScriptをビルドする
 
Web技術勉強会 20111112
Web技術勉強会 20111112Web技術勉強会 20111112
Web技術勉強会 20111112
 
Web技術勉強会 20110723
Web技術勉強会 20110723Web技術勉強会 20110723
Web技術勉強会 20110723
 
Web技術勉強会 20110611
Web技術勉強会 20110611Web技術勉強会 20110611
Web技術勉強会 20110611
 
Web技術勉強会 20110528
Web技術勉強会 20110528Web技術勉強会 20110528
Web技術勉強会 20110528
 
Web技術勉強会 20110514
Web技術勉強会 20110514Web技術勉強会 20110514
Web技術勉強会 20110514
 
Web技術勉強会 20100925
Web技術勉強会 20100925Web技術勉強会 20100925
Web技術勉強会 20100925
 
Web技術勉強会 20100424
Web技術勉強会 20100424Web技術勉強会 20100424
Web技術勉強会 20100424
 
Web技術勉強会 第38回
Web技術勉強会 第38回Web技術勉強会 第38回
Web技術勉強会 第38回
 
Web技術勉強会 第37回
Web技術勉強会 第37回Web技術勉強会 第37回
Web技術勉強会 第37回
 
Web技術勉強会 第34回
Web技術勉強会 第34回Web技術勉強会 第34回
Web技術勉強会 第34回
 
Web技術勉強会 第33回
Web技術勉強会 第33回Web技術勉強会 第33回
Web技術勉強会 第33回
 
Web技術勉強会 第31回
Web技術勉強会 第31回Web技術勉強会 第31回
Web技術勉強会 第31回
 
Web技術勉強会 第30回
Web技術勉強会 第30回Web技術勉強会 第30回
Web技術勉強会 第30回
 
Web技術勉強会 第29回
Web技術勉強会 第29回Web技術勉強会 第29回
Web技術勉強会 第29回
 
Web技術勉強会 第28回
Web技術勉強会 第28回Web技術勉強会 第28回
Web技術勉強会 第28回
 

Web技術勉強会 第18回