6

私は現在、Backbone.jsで構築されたWebサイトに取り組んでいます。このサイトには、FOSRestBundleを使用してSymfonyに組み込まれたRESTfulAPIがあります。ユーザー関連のチケットに出くわすまで、開発は順調に進んでいました。

私が理解していることから、このタイプの問題を処理する最良の方法は、トークンベースのシステムを使用することです。このシステムでは、ユーザーは承認されたログイン後にアクセストークンを取得します。ワークフローに対する私の現在の認識を説明し、その過程で質問をします。さらに重要なことに、私が誤解している場合は私を訂正してください。

最初に、ユーザーがログインフォームにアクセスし、次にユーザーが資格情報を入力すると、AJAXリクエストがサーバーに送信されます。私が理解していることから、これはすべてSSLで処理する必要がありますが、Backbonejsは1ページのフレームワークであるため、ログインページにHTTPSでアクセスする必要があると単純に言うことはできません。それで、これは私にアプリケーション全体でHTTPSを使用することを強制しますか?

次のステップでは、RESTサーバーが資格情報を検証し、それらが承認された後、RESTサーバーがクライアントにアクセストークンを送信します。このトークンは(クライアント側で)ローカルストレージまたはCookieに保存されていますか?

また、RESTサーバーが一定時間後にユーザーをログアウトできるように、ログインはサーバーに保存されますか?

これで、クライアントはこのアクセストークンを他の要求と一緒に送信するため、サーバーはクライアントを識別し、要求を承認するかどうかを決定できます。では、アクセストークンはRESTサーバーにも保存されますか?

最後に、これは賢い人々が「oauth」と呼ぶものですか、それともそれに関連していますか?

ありがとうございました。

4

1 に答える 1

6

質問を1つずつ取り上げましょう。

私が理解していることから、これはすべてSSLで処理する必要がありますが、Backbonejsは1ページのフレームワークであるため、ログインページにHTTPSでアクセスする必要があると単純に言うことはできません。それで、これは私にアプリケーション全体でHTTPSを使用することを強制しますか?

さて、そこに開梱することがたくさんあります。SSL/HTTPSから始めましょう。HTTPSはプロトコルです; つまり、サーバーとの間でパケットを送受信する方法を定義します。アプリケーションが単一ページであるか複数ページであるかは関係ありません。どちらのタイプのサイトでも、HTTPまたはHTTPSのいずれかを使用できます。

そうは言っても、HTTP経由でログイン情報(またはパスワードを含むその他のもの)を送信することは、「悪意のある人」がユーザーのパスワードを盗むのを非常に簡単にするため、非常に悪い考えです。したがって、シングルページアプリでもマルチページアプリでも、ログイン情報を送信するときは常にHTTPSを使用する必要があります。HTTPとHTTPSの両方をサポートする必要があるのは面倒であり、他の非ログインデータも機密性が高い可能性があるため、多くの人はHTTPSを介してすべての要求を実行することを選択します(ただし、そうする必要はありません

したがって、実際の質問に答えるために、BackboneはログインにHTTPSを使用することをまったく強制していません。ユーザーのパスワードを保護することはあなたを強制しています。

次のステップでは、RESTサーバーが資格情報を検証し、それらが承認された後、RESTサーバーがクライアントにアクセストークンを送信します。このトークンは(クライアント側で)ローカルストレージまたはCookieに保存されていますか?

特定のフレームワークはそれを異なる方法で行う可能性がありますが、大多数はCookieを使用してトークンをローカルに保存します。さまざまな理由から、それらはその種のものに最適なツールです。

また、RESTサーバーが一定時間後にユーザーをログアウトできるように、ログインはサーバーに保存されますか?

基本的に正しい考えはありますが、サーバーはログインを正確に保存しません...サーバーがユーザーにログインして「セッション」を作成するようなものです。これにより、そのセッションにIDが付与され、ユーザーが新しいリクエストを行うたびに、そのセッションIDがリクエストに付属します(これがCookieの動作方法であるため)。これで、サーバーは「これはボブのセッションです」と言って、ボブに適切なコンテンツを提供できます。

これで、クライアントはこのアクセストークンを他の要求と一緒に送信するため、サーバーはクライアントを識別し、要求を承認するかどうかを決定できます。では、アクセストークンはRESTサーバーにも保存されますか?

2つの別々のサーバーを実行している場合、それらは魔法のように通信することはありません。あなたは彼らを互いに話させなければなりません。このため、アプリ全体に1台の(おそらくRESTフルな)サーバーを使用できれば、作業は楽になります。それができない場合、RESTサーバーは、要求を受け取るたびに、他のサーバーに「セッションSESSIONIDについて教えてください」と尋ねる必要があります。

最後に、これは賢い人々が「oauth」と呼ぶものですか、それともそれに関連していますか?

ある種、ある種、実際にはそうではありません。OAuthは承認標準であるため、接線方向に関連していますが、ログインシステムにまったく別のサーバーが含まれていない限り、OAuthを使用する理由はありません。OAuthを使用して、「2つのサーバー、1つのRESTフルなサーバーではない」問題を解決できますが、それはおそらくやり過ぎでしょう(そして、この1つのStack Overflowの投稿で説明できる範囲外であっても)

お役に立てば幸いです。

于 2013-01-30T00:31:32.463 に答える