Weitere ähnliche Inhalte
Ähnlich wie Apexで作成したrest apiをしっかり保護する方法 (20)
Mehr von Kazuki Nakajima (18)
Kürzlich hochgeladen (11)
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をテナント毎
に作成する。(ユーザー毎だとこのやり⽅は
キツい)