OAuth 以外の方法
By zama_zama - IMG_0741-2(2014) / CC BY 2.0
- まずサーバ間で通信するパターン
- アプリ パスワードでログイン - Google アカウント ヘルプ と似たような発想で、サービスが取得を許可したページのみアクセス可能なパスワードを発行し、それを使用してスクレイピングする
- ログインパスワードを預けるケースと比べ、アクセスが限定でき、問題があったときに無効化できる
- アプリ パスワードでログイン - Google アカウント ヘルプ と似たような発想で、サービスが取得を許可したページのみアクセス可能なパスワードを発行し、それを使用してスクレイピングする
- クライアントから取得し、結果をサーバに送るパターン
- ネイティブアプリでログインパスワードを使ってスクレイピングする
- パスワードはクライアントで保持され、リバースエンジニアリングによって動作が検証可能
- 各プラットフォーム向けにアプリを用意する必要がある
- XMLHttpRequest Level 2 を利用して、ウェブサービスにログイン済みのブラウザからスクレイピングする
- サービスは、リクエストが以下の条件を満たしたときのみ Access-Control-Allow-Origin ヘッダと Access-Control-Allow-Credentials ヘッダ を出力する
- 登録済みの Origin ヘッダ
- 取得を許可したページ
- 取得を認可したユーザ
- リクエストは withCredentials を有効にして Cookie を送信する
- JavaScript で実装されているため、動作の検証が容易
- サービスは、リクエストが以下の条件を満たしたときのみ Access-Control-Allow-Origin ヘッダと Access-Control-Allow-Credentials ヘッダ を出力する
- ネイティブアプリでログインパスワードを使ってスクレイピングする
- 比較表
サーバ側コスト | 取得元コスト | 動作検証 | リスク | |
---|---|---|---|---|
OAuth 2.0 + API | 高 | 中 | 不可 | トークン漏洩 |
アプリケーション固有のパスワード | 中 | 低 | 不可 | 固有パスワード漏洩 |
ネイティブアプリ | なし | 高 | 可能 | ログインパスワード漏洩 |
XMLHttpRequest Level 2 | 低 | 中 | 容易 | 取得情報漏洩 |
- クライアントから情報を取得するケースは、ユーザによる改ざんの可能性があるので、用途によっては注意が必要ですね
- ネイティブアプリはたびたび意図に反した送信が発覚しますが、ユーザから見て JavaScript は安心感があります
- サーバ間の通信については、後日掘り下げて考えてみたいと思います