2014年4月17日 dstnhub発表スライド...

27
OAuth 2.0 認認認認認認認 Dropbox 認認認認認認 Lightning Talk @ dstn HUB, April 2014 認認認認認認認認認 認認認 認認 1G 認認認 DataSpider Servista

Upload: dstn

Post on 19-Jun-2015

698 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 2014年4月17日 dstnHub発表スライド ライトニングトークス「開発部開発グループ OAuth2.0 認証を実現してみた」

OAuth 2.0 認証を実現してDropbox に繋いでみたLightning Talk @ dstn HUB, April 2014

株式会社アプレッソ開発部 開発 1G  陳映融

DataSpider Servista で

Page 2: 2014年4月17日 dstnHub発表スライド ライトニングトークス「開発部開発グループ OAuth2.0 認証を実現してみた」

簡単な自己紹介

• 2014 年 1 月 アプレッソに入社 (まだピチピチ?)

• 台湾出身 (寒いのは苦手)

• 日本語でおk (いま発表しているわけだし)

2

Page 3: 2014年4月17日 dstnHub発表スライド ライトニングトークス「開発部開発グループ OAuth2.0 認証を実現してみた」

OAuth 2.0 認証って?

• OAuth (オー オース)– Web サービスと連携するための認証– 連携対象のリソースへのアクセス認可も扱う

⇒ Web サービスの API のアクセス認証

• OAuth 2.0 = 次世代の OAuth– その仕組みはちょっと複雑なので…

3

Page 4: 2014年4月17日 dstnHub発表スライド ライトニングトークス「開発部開発グループ OAuth2.0 認証を実現してみた」

OAuth 2.0 認証の仕組みを寸劇風で説明します!

※ Authorization Code Grant Flow の場合

Page 5: 2014年4月17日 dstnHub発表スライド ライトニングトークス「開発部開発グループ OAuth2.0 認証を実現してみた」

登場人物

• SP :サービスプロバイダ• AS@SP :認証サーバ( authorization

server )• RS@SP :リソースサーバ( resource

server )• DEV :開発者• APP :アプリ• USER :利用者=リソースの所有者

5

Page 6: 2014年4月17日 dstnHub発表スライド ライトニングトークス「開発部開発グループ OAuth2.0 認証を実現してみた」

シーン0~本番前

• 開発者がサービスプロバイダにアプリ登録

SP さん、紹介するよ~ うちの新人の APP ちゃんだ!

APP です。今後ともよろしくお願いします。 m(_ _)m

お、よろしく! APP さんのID カードを発行するから、

無くさないようにしまってね~

IDカード:クライアント識別用の ID と秘密鍵

6

Page 7: 2014年4月17日 dstnHub発表スライド ライトニングトークス「開発部開発グループ OAuth2.0 認証を実現してみた」

シーン1~認証開始• ユーザがアプリに仕事を依頼

APP ちゃん、あとで用事を頼みたいけど、先に SP さ

んの所に行ってくれない?

はい、お安いご用です。行ってきま

す。

7

Page 8: 2014年4月17日 dstnHub発表スライド ライトニングトークス「開発部開発グループ OAuth2.0 認証を実現してみた」

シーン2~認証コードリクエスト• アプリが認証サーバに認証コードをリク

エストUSER さんに用事を頼まれまし

た。ロッカーの合鍵引換証をくださ

い。

ID カードを拝見します。USER さんに連絡して確認を取るから、少々ちょっとお待ちを。

ロッカー合鍵引換証:認証コード、リソース(ロッカー)のアクセス(合鍵)を引き換えるための一時的認可

8

Page 9: 2014年4月17日 dstnHub発表スライド ライトニングトークス「開発部開発グループ OAuth2.0 認証を実現してみた」

• ユーザにログインして、アプリのアクセスを承認してもらう

シーン3~ユーザ承認

USER さん、 APP さんに用事を依頼したのは間違

いないですか?

はい、間違いないです。

大丈夫です。ボクのロッカーを APP ちゃんに使

わせてください。では、 USER さんのロッカーを APP さんに使わ

せて大丈夫でしょうか?

ロッカー:ウェブサービス上にある、ユーザが所有しているリソース 9

Page 10: 2014年4月17日 dstnHub発表スライド ライトニングトークス「開発部開発グループ OAuth2.0 認証を実現してみた」

シーン4~認証コード発行• 認証サーバが認証コードを発行

ありがとうございます。

USER さんに確認を取れたので、引換証を発行します。

10

Page 11: 2014年4月17日 dstnHub発表スライド ライトニングトークス「開発部開発グループ OAuth2.0 認証を実現してみた」

シーン5~アクセストークン発行• アプリが認証コードをアクセストークン

に交換USER さんのロッカーですね。

ID カードを確認させてください。

USER さんのロッカーの合鍵をくださ

い。合鍵引換証あります。

はい、 ID カードはここにありま

す。

うん、問題ないですね。はい、合鍵です。

11

Page 12: 2014年4月17日 dstnHub発表スライド ライトニングトークス「開発部開発グループ OAuth2.0 認証を実現してみた」

シーン6~認証完了• アプリが許可されたリソースにアクセス

さて、仕事はじめますか。

12

Page 13: 2014年4月17日 dstnHub発表スライド ライトニングトークス「開発部開発グループ OAuth2.0 認証を実現してみた」

早速、 OAuth2.0 認証用のスクリプトを見てみましょう!

Page 14: 2014年4月17日 dstnHub発表スライド ライトニングトークス「開発部開発グループ OAuth2.0 認証を実現してみた」

アクセストークン取得スクリプト

※HTTP トリガーに登録しておく (リダイレクト URI として使用)

14

Page 15: 2014年4月17日 dstnHub発表スライド ライトニングトークス「開発部開発グループ OAuth2.0 認証を実現してみた」

アクセストークン取得の流れ

【変数代入】リクエストの識別情報用の実行 ID を取得して、スクリプト変数に保存する。

15

Page 16: 2014年4月17日 dstnHub発表スライド ライトニングトークス「開発部開発グループ OAuth2.0 認証を実現してみた」

アクセストークン取得の流れ

【外部アプリケーション起動】ブラウザ起動して、認証サーバにリクエスト送信する。パラメータ:・ client_id = クライアント ID・ redirect_uri = リダイレクト URI・ state = リクエスト・レスポンス同定用情報(実行 ID )

16

Page 17: 2014年4月17日 dstnHub発表スライド ライトニングトークス「開発部開発グループ OAuth2.0 認証を実現してみた」

アクセストークン取得の流れ

【繰り返し(条件指定)】認証コードのレスポンスが処理されて、一時ファイルが作成されるまで待つ

17

Page 18: 2014年4月17日 dstnHub発表スライド ライトニングトークス「開発部開発グループ OAuth2.0 認証を実現してみた」

アクセストークン取得の流れ

( HTTP トリガー発火)スクリプトパラメータ:・ code = 認証コード・ state = リクエスト・レスポンス 同定用情報(実行 ID )

18

Page 19: 2014年4月17日 dstnHub発表スライド ライトニングトークス「開発部開発グループ OAuth2.0 認証を実現してみた」

アクセストークン取得の流れ

【変数代入】リクエスト・レスポンス同定用情報(実行 ID )を保存先ファイル名に設定する。

19

Page 20: 2014年4月17日 dstnHub発表スライド ライトニングトークス「開発部開発グループ OAuth2.0 認証を実現してみた」

アクセストークン取得の流れ

【マッピング】【 CSV ファイル書き込み】認証コードを一時ファイルに保存する。

20

Page 21: 2014年4月17日 dstnHub発表スライド ライトニングトークス「開発部開発グループ OAuth2.0 認証を実現してみた」

アクセストークン取得の流れ

【繰り返し(条件指定)】ファイルが作成されたのでループ終了。

21

Page 22: 2014年4月17日 dstnHub発表スライド ライトニングトークス「開発部開発グループ OAuth2.0 認証を実現してみた」

アクセストークン取得の流れ

【 CSV ファイル読み取り】【マッピング】認証コード一時ファイルから認証コードを抽出して、スクリプト変数に保存。

22

Page 23: 2014年4月17日 dstnHub発表スライド ライトニングトークス「開発部開発グループ OAuth2.0 認証を実現してみた」

アクセストークン取得の流れ

【 POST 実行】認証コードでアクセストークンを取得する。パラメータ:・ code = 認証コード・ client_id = クライアント ID・ client_secret = クライアント秘密鍵・ redirect_uri = リダイレクト先 URI (確認用)

23

Page 24: 2014年4月17日 dstnHub発表スライド ライトニングトークス「開発部開発グループ OAuth2.0 認証を実現してみた」

アクセストークン取得の流れ

【マッピング】【 CSV ファイル書き込み】レスポンスからアクセストークンを抽出して、ファイルに保存する。

24

Page 25: 2014年4月17日 dstnHub発表スライド ライトニングトークス「開発部開発グループ OAuth2.0 認証を実現してみた」

アクセストークン取得の流れ

【ファイル /ディレクトリ削除】認証コードの一時ファイルを削除する。

25

Page 26: 2014年4月17日 dstnHub発表スライド ライトニングトークス「開発部開発グループ OAuth2.0 認証を実現してみた」

(おまけ)Dropbox の連携スクリプト

Page 27: 2014年4月17日 dstnHub発表スライド ライトニングトークス「開発部開発グループ OAuth2.0 認証を実現してみた」

リソースへのアクセス例

【 CSV ファイル読み取り】ファイルからアクセストークンを読み取る。

【変数代入】アクセストークンをスクリプトに設定する。

【 GET 実行】/account/info ⇒ アカウント情報を取得する/files ⇒ ファイルをダウンロードする

27