3

パリで開催された 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 はどうですか? 私はそれについてあまり知りませんが、それはそのような問題の解決策になるのでしょうか?

4

1 に答える 1

1

あなたは間違いなくOAuthを使いたくなるでしょう。これにより、ユーザーが本人であることを安全に認証できます。ユーザーが認証されると、今後のリクエストに署名するために使用できるアクセス トークンが得られます。

認証スキームとハンドシェイクを処理し、発行されたアクセス トークンを安全に保管するだけで済みます。しかし、私だったら、そのようなシステムを設計する際に、すべての安全なケースを処理できるとは思えません。この種のことを行うサードパーティの PaaS 企業がいくつかあります。おそらく役立つAPI管理ツールをいくつか持っている次の会社を知っています。彼らはOAuthの実装も扱っています。

セキュリティについて非常に心配しているが、サード パーティがセキュリティを処理することを信頼していない場合は、OAuth プロトコルに従うことをお勧めします。

于 2012-06-13T01:30:56.837 に答える