Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
APEXで作成したREST APIをしっかり保護する⽅法
⽇本オラクル 中嶋⼀樹
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 2
REST API
apex.oracle.com 3rd Party Application
• ときにウェブサービス
• ときにモバイルアプリ
• ときにBot
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 3
REST API
apex.oracle.com 3rd Party Application
鍵(トークン)が必要
*パスワードではない 
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 4
REST API
3rd Party Application
*パスワードではない 
友達リストをゲットしたいんだけど。
どうするよ?
①②
③
よかろう
④
これトークンな。
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
⼀般的にはOAuth2.0 + Authorizationヘッダーへのトークン付加
5
• そもそもは、パスワードをそのまま渡すよりセキュアな認可の仕組み。
• ⼤事なパスワードを教えることなく、必要な権限だけ許可できる。
• ユーザーがパスワードを変更しても影響を受けない。
• トークンの失効、リフレッシュといった仕組みの完備。
• HTTPヘッダーを使うことでトークンが露出しにくい(気休め程度)
• 複数のフローが定義されており、いろんなシチュエーションに対応できる。
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Database CloudでもOAuth2.0できます
6
Qiita: apex.oracle.comのAPIをOAuth2.0で保護する⽅法
(apex.oracle.com含む)
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
ただし、
7
• Userごとの認証・認可には向いているが、Server to Serverでは?
• そもそもどのユーザーで認可すれば?
• リフレッシュ処理が定期的に必要だが無駄なオーバーヘッドになる。
REST API
apex.oracle.com 3rd Party Application
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 8
Server to ServerのアクセスだけであればURIへのトークン埋め込みでもOK
• 脆弱な気がするが、SSLしていればヘッダーでもURIでも暗号化されている。
• 例えばFacebookのMessage APIではQuery Stringにトークンを指定する仕様
https://graph.facebook.com/v2.8/me/messages?access_token=あなたのトークン
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. |
Database CloudでもURIへのトークン埋め込みは超簡単
9
Copyright © 2016, Oracle and/or its affiliates. All rights reserved. | 10
ただし、
• サービスがマルチテナント型だったり、
ユーザーによってアクセスできるデー
タを制御する必要がある場合。
その場合の対処固定トークンでは対応できないケース
• トークンをバインド変数にしてSQL or
PL/SQLで制御する。(データ構造をマル
チテナント・マルチユーザー対応にしておく必
要あり)
• WORKSPACEまたはPDBをテナント毎
に作成する。(ユーザー毎だとこのやり⽅は
キツい)
Apexで作成したrest apiをしっかり保護する方法

Apexで作成したrest apiをしっかり保護する方法

  • 1.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. | APEXで作成したREST APIをしっかり保護する⽅法 ⽇本オラクル 中嶋⼀樹
  • 2.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. | 2 REST API apex.oracle.com 3rd Party Application • ときにウェブサービス • ときにモバイルアプリ • ときにBot
  • 3.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. | 3 REST API apex.oracle.com 3rd Party Application 鍵(トークン)が必要 *パスワードではない 
  • 4.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. | 4 REST API 3rd Party Application *パスワードではない  友達リストをゲットしたいんだけど。 どうするよ? ①② ③ よかろう ④ これトークンな。
  • 5.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. | ⼀般的にはOAuth2.0 + Authorizationヘッダーへのトークン付加 5 • そもそもは、パスワードをそのまま渡すよりセキュアな認可の仕組み。 • ⼤事なパスワードを教えることなく、必要な権限だけ許可できる。 • ユーザーがパスワードを変更しても影響を受けない。 • トークンの失効、リフレッシュといった仕組みの完備。 • HTTPヘッダーを使うことでトークンが露出しにくい(気休め程度) • 複数のフローが定義されており、いろんなシチュエーションに対応できる。
  • 6.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. | Database CloudでもOAuth2.0できます 6 Qiita: apex.oracle.comのAPIをOAuth2.0で保護する⽅法 (apex.oracle.com含む)
  • 7.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. | ただし、 7 • Userごとの認証・認可には向いているが、Server to Serverでは? • そもそもどのユーザーで認可すれば? • リフレッシュ処理が定期的に必要だが無駄なオーバーヘッドになる。 REST API apex.oracle.com 3rd Party Application
  • 8.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. | 8 Server to ServerのアクセスだけであればURIへのトークン埋め込みでもOK • 脆弱な気がするが、SSLしていればヘッダーでもURIでも暗号化されている。 • 例えばFacebookのMessage APIではQuery Stringにトークンを指定する仕様 https://graph.facebook.com/v2.8/me/messages?access_token=あなたのトークン
  • 9.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. | Database CloudでもURIへのトークン埋め込みは超簡単 9
  • 10.
    Copyright © 2016,Oracle and/or its affiliates. All rights reserved. | 10 ただし、 • サービスがマルチテナント型だったり、 ユーザーによってアクセスできるデー タを制御する必要がある場合。 その場合の対処固定トークンでは対応できないケース • トークンをバインド変数にしてSQL or PL/SQLで制御する。(データ構造をマル チテナント・マルチユーザー対応にしておく必 要あり) • WORKSPACEまたはPDBをテナント毎 に作成する。(ユーザー毎だとこのやり⽅は キツい)