ゼロからはじめるサーバーサイド vol2

37
ゼロからはじめる サーバーサイド 第2回 STANDS / @chatii0079

Upload: taichi-inaba

Post on 31-May-2015

1.755 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ゼロからはじめるサーバーサイド Vol2

ゼロからはじめる サーバーサイド

第2回STANDS / @chatii0079

Page 2: ゼロからはじめるサーバーサイド Vol2

自己紹介• STANDS (スタンヅ) 代表

• ずっとフリーで仕事してます

• 稲葉 太一

• PHPer歴は長い

• ネットワーク構築や Windows Serverの設定とか

• 特殊なのだと電話とかカメラの設置設定

• 引出しは多い

• http://chatii.net

• Twitter: @chatii0079

• ちゃちいさんと呼んでください

Page 3: ゼロからはじめるサーバーサイド Vol2

前回のおはなしWeb サーバーとは Apache, nginx, IIS…

HTTP で通信

暗号化通信の HTTPS

!

サーバーサイド プログラミング Java, Perl, PHP, Python, Ruby, ASP.NET (C#, etc…)

データベース RDBMS

MySQL, Postgresql, Oracle, Microsoft SQL Server…

NoSQL (Not only SQL)

MongoDB, Redis…

!

ブラウザのページ取得 静的/動的の違い

GET/POST

GET で実装すべきか、POST で実装すべきか

Page 4: ゼロからはじめるサーバーサイド Vol2

本日の献立

Web API

OAuth

OpenID

Ajax とか (時間あれば)

Page 5: ゼロからはじめるサーバーサイド Vol2

Web API(うぇぶ えーぴーあい)

Page 6: ゼロからはじめるサーバーサイド Vol2

Web API とはそもそも API って何?

Application Programming Interface (アプリケーション・プログラミング・インターフェース)の略。

あるプログラムの機能/データを他のプログラムから呼び出す規約のこと。

Windows アプリケーションを作るとき…いちからウィンドウを表示するプログラムを作る…のは面倒! でも、Windows API を呼び出せば、短いコードで簡単に!

べんり!!

Page 7: ゼロからはじめるサーバーサイド Vol2

Web API とはじゃあ Web API は?

インターネット経由で他の Web サービスのデータを取得したり、機能を使うことができる。 JSON や XML などの形式で取得でき、JavaScript や サーバーサイド言語でうまく取り扱えるようになっている。

認証が必要な場合も。キーを取得したり OAuthで認可を得る。

Page 8: ゼロからはじめるサーバーサイド Vol2

Web APIサーバー/クライアントのどちらもWeb API を利用できる !

Web API を提供するシステムはその中でデータを用意したり、処理を行って、結果を返してあげる

Page 9: ゼロからはじめるサーバーサイド Vol2

Web API とはたとえば…

Google Maps API を使って、移動距離/時間を呼び出す

はてなブックマーク件数取得API を使って、 はてブ数を取得する

Amazon Product Advertising API を使って、 商品情報を取得する

Page 10: ゼロからはじめるサーバーサイド Vol2

Web API とは使ってみる

TechBuzz Space から 新宿駅 までの ルート検索 http://bit.ly/zeross-sample

Google 検索で 「サーバーサイド」の サジェスト取得http://bit.ly/zeross-sample2

どんな API があるのか、どういうふうに使うのかはしっかりドキュメントを読みましょう!

Page 11: ゼロからはじめるサーバーサイド Vol2

TechBuzz Space から 新宿駅 までのルート検索

Google 検索で 「サーバーサイド」のサジェスト取得

Page 12: ゼロからはじめるサーバーサイド Vol2

OAuth(おー おーす)

Page 13: ゼロからはじめるサーバーサイド Vol2

OAuth の使い道Web API を使う権限を認可

OAuth にはログイン機能はない

ユーザーは「Resource Owner」

OAuth を使った API を提供しているサービスは 「OAuth Server」

OAuth Server の API を利用するサービスは 「OAuth Client」

OAuth Server のリソースを使うための認可

Page 14: ゼロからはじめるサーバーサイド Vol2

OAuth の流れTwitter を使う場合の例

Page 15: ゼロからはじめるサーバーサイド Vol2

OAuth の流れTwitter を使う場合の例

• フロー開始 • OAuth Client • 「Twitter でログインする」

• 認可のリクエスト • OAuth Client から OAuth Server へリダイレクト

• アクセス権限の付与 • OAuth Server

• 「○○があなたのアカウントを利用することを許可しますか? • 「連携アプリを認証」

• 認可レスポンス • OAuth Server から OAuth Client へリダイレクト • リダイレクト URL にアクセス権限付与のトークンを含む

• アクセストークンとの交換 • OAuth Client は、取得したトークンを Access Token と交換

• 以後、API へアクセスできる • アクセストークンが期限切れ または 無効化されるまで

Page 16: ゼロからはじめるサーバーサイド Vol2

OAuth 認証?「Twitter でログインする」?

OAuth にはログイン機能はない

半分正解、半分間違い

「OAuth 使って Twitter/Facebook のアカウントでログインできるようにしよう!」

なぜ?答えは後ほど。

Page 17: ゼロからはじめるサーバーサイド Vol2

OpenID(おーぷん あいでぃー)

Page 18: ゼロからはじめるサーバーサイド Vol2

OpenID とはBASIC 認証の替わり?

ユーザー中心の分散 ID 認証システム

ブラウザベースの認証

OpenID を使ってログインしようとする

OpenID 対応のプロバイダーはエンドユーザーを 認証する

その結果、【URL】を ID として返す

Page 19: ゼロからはじめるサーバーサイド Vol2

OpenID とはYahoo! JAPAN の OpenID を使ってみる

「Yahoo! Japan IDやパスワードはOpenID対応サイトには送信されません」

• 認証だけしてもしょうがない…? • API の利用やモバイルには不便 • 強固な暗号化をサポートしない

Page 20: ゼロからはじめるサーバーサイド Vol2

OpenID と OAuth の違い

Page 21: ゼロからはじめるサーバーサイド Vol2

OpenID と OAuth の違い認証 と 認可

認証: Authentication (おーせんてぃけーしょん)

ID が正しくそのユーザーのものか

認可: Authorize (おーそらいず)

ID の使うサービスに適切な権限を付与

Page 22: ゼロからはじめるサーバーサイド Vol2

OpenID と OAuth の違いひらたくいうと

OpenID

ユーザーの認証情報をやりとり

OAuth

OAuth Server の API へアクセスを実現

OAuth は 認証のやり方を決めていない

Page 23: ゼロからはじめるサーバーサイド Vol2

OAuth 認証?「Twitter でログインする」?

OAuth にはログイン機能はない

半分正解、半分間違い

「OAuth 使って Twitter/Facebook のアカウントでログインできるようにしよう!」

なぜ?

Page 24: ゼロからはじめるサーバーサイド Vol2

OAuth 認証?「半分正解、半分間違い」?

OAuth は API へのアクセス権限を付与するもので、 本人認証の機能を持っていない

「ソーシャルログイン」の実装として、API のアクセス権限と取得しつつユーザーアカウントとして使ってしまおう

「ツイート読み込む権限を取得しないと」

「フォロワーしている人を読み込む権限を取得しないと」

余計な権限を与える/もらうっていうのはセキュアじゃないよね

Page 25: ゼロからはじめるサーバーサイド Vol2

OpenID Connect(おーぷん あいでぃー こねくと)

Page 26: ゼロからはじめるサーバーサイド Vol2

OpenID Connectひらたくいうと

OAuth をベースに OpenID を実現する

ソーシャルアカウントで【認証】をセキュアにできる

もちろんネイティブアプリでも使える

Page 27: ゼロからはじめるサーバーサイド Vol2

OpenID Connect対応サービス

などなど

Page 28: ゼロからはじめるサーバーサイド Vol2

OpenID ConnectOpenID ではできなかったことが

対応サービスにひも付くユーザー情報も取り出す

氏名、ふりがな

メールアドレス

住所など…

サービス側が提供するもの

会員登録フォームを作らなくて良くなる未来?

Page 29: ゼロからはじめるサーバーサイド Vol2

Ajax とか(えいじゃっくす とか)

Page 30: ゼロからはじめるサーバーサイド Vol2

Ajax とかAjax はもう枯れてる?

Ajax で非同期通信!!

非同期通信って?

画面遷移せずに GET/POST できる

みんな大好き jQuery で簡単に実装できる

でも問題も

サーバーからクライアントへの通信ができない

Page 31: ゼロからはじめるサーバーサイド Vol2

Ajax とかAjax のかわり?

Comet で非同期通信!!

Ajax とどう違う?

サーバーからクライアントへの通信 (Push) ができる

はやらなかった

Page 32: ゼロからはじめるサーバーサイド Vol2

Ajax とかAjax/Comet の問題点

サーバーとのコネクションが

Ajax は複数使うのでリソース使いまくり

Comet はコネクション張りっぱなし

サーバーへの負荷が大きい

HTTP 1.1 通信の仕組みなので、サーバーサイド/クライアントサイドでどうにかするのは「小手先」の対応

Page 33: ゼロからはじめるサーバーサイド Vol2

Ajax とかAjax/Comet のかわり?

WebSocket

Page 34: ゼロからはじめるサーバーサイド Vol2

Ajax とかWebSocket とは

Comet のようなリアルタイム通信 長時間接続が前提

接続中は、 クライアントからサーバーの通信 サーバーからクライアントの通信

接続は 1 回 で何回でも送受信可能 最初は HTTP を使い接続を確立、その後 WebSocket ws://example.com/hoge

サーバーにやさしい

Page 35: ゼロからはじめるサーバーサイド Vol2

Ajax とかWebSocket を使う?

ブラウザの対応状況

クライアント側は、Internet Explorer 10(含むモバイル)、Mozilla Firefox 6 (Firefox for Mobile 7)、Google Chrome 4 (含むモバイル)、 Safari 5 (含むiOS 4.2以降)、Opera 12.10(含むモバイル)、Android 4.4、BlackBerry 7 (要設定)で実装されている。

出典 http://ja.wikipedia.org/wiki/WebSocket#.E5.AE.9F.E8.A3.85.E7.8A.B6.E6.B3.81

Page 36: ゼロからはじめるサーバーサイド Vol2

Ajax とかWebSocket を使う?

サーバー側の実装 各言語 で WebSocket のライブラリが公開されている

多分有名なのは… Node.js Socket.IO http://socket.io/

Page 37: ゼロからはじめるサーバーサイド Vol2

参考資料SOAP,WSDL,REST――Web APIの基礎技術を学ぶ

http://itpro.nikkeibp.co.jp/article/COLUMN/20060928/249253/ YAPC::Tokyo 2013 ritou OpenID Connect

http://www.slideshare.net/ritou/yapc2013-ritou-oidc なぜOpenID Connectが必要となったのか、その歴史的背景

http://www.slideshare.net/tkudo/openid-connect-devlove 非技術者のためのOAuth認証(?)とOpenIDの違い入門

http://www.sakimura.org/2011/05/1087/ 単なる OAuth 2.0 を認証に使うと、車が通れるほどのどでかいセキュリティー・ホールができる

http://www.sakimura.org/2012/02/1487/ SPAを実現するために必要な通信技術

http://www.slideshare.net/yusukenaka52/spa-30482031 双方向通信を実現! WebSocketを使いこなそう

http://www.atmarkit.co.jp/ait/articles/1111/11/news135.html WebSocket - Wikipedia

http://ja.wikipedia.org/wiki/WebSocket