パリで開催された Symfony Live 2012 で幸運にも " Designing HTTP Interfaces and RESTful Web Services " カンファレンスに参加しましたが、RESTful API を非公開かつメンバーのみに保ちながら構築する方法について多くの質問をしました。
現在、私は自分の API を非公開にするために API キーを生成していました (これは、自分自身のサードパーティ アプリケーションがエンド ユーザーに利用できることを意味します)。
サインアップしたユーザーが (モバイル アプリを介して) API を使用できるようにするために、私は Cookie を使用します。まあ、SESSION を使用しました。
しかし、話によると (および私が Web で読んだ他のリソース)、それは正しい方法ではありません。
私のニーズは次のとおりです。
- モバイル アプリのみが使用できるプライベート API を提供する
- メンバー (さまざまな役割) がさまざまなアクションを実行できるようにします (つまり、メンバーはコメントを投稿でき、管理者はそれらすべてを編集できます)。
REST 制約は (とりわけ) ステートレスであるため、Cookie/Session はクライアントによって開始される必要があり、冪等でない結果になるため、使用できません。
API を RESTful に保つ方法は、リクエストごとに資格情報を提供することだとあちこちで読みました。
現在、API キーを認証する (非公開にするため) ために、カスタム HTTP 承認スキームを使用Authorization: MyApp SoMeToKeNV3RYPR!V4T3
し、POST メソッドでメンバー (ログイン) を認証します (ブラウザー Web アプリケーションで行うように)。
そのようなケースをどのように実装しますか?このようなプライベート スキームを使用し、セッションを使用し続けることは許容されますか?
少し読んだ後、各リクエストに対して何らかの署名を使用すると、このような問題を解決できると思うかもしれません。
署名は、(API を非公開に保つため) 公開/秘密鍵で暗号化しながら、サードパーティ クライアントで提供されたユーザー資格情報を使用して生成できます。
リクエストごとに、署名はCRC(またはそのようなもの)に対してチェックされますが、資格情報はデータベースに対してチェックされます(セッションをチェックするよりも価値がないようですよね?)
ヘルプ/アドバイスをいただければ幸いです。
PS: OAuth はどうですか? 私はそれについてあまり知りませんが、それはそのような問題の解決策になるのでしょうか?