37

私は、フロントエンドでバックボーンを使用し、サーバー上の薄いRESTful APIからデータを消費する単一ページアプリケーションプロトタイプを開発しました。シングルページアプリケーション上のユーザーの認証?

太いクライアントサイドのアプリケーション開発(PHPとPython)から来て、私は本当に厚いクライアントサイドのMVCを使って新しいデザインのアプローチを楽しんだのですが、ログインした認証済みのユーザにアプリを制限する方法を混乱させます。

私はログインの後ろにアプリケーション自体を持っていることが好きで、サイトのネイティブログインに加えて、最終的に他のタイプのログイン(openid、fb connectなど)を実装したいと考えています。私はこれがどのように行われているのか不明確ですが、私には明らかになった情報を見つけることができませんでした。

大きな写真では、ユーザーを登録してシングルページアプリケーションを使用するためにログインする必要がある現在のベストプラクティスは何ですか?

ユーザーがログインすると、どのようにAPIリクエストが認証されますか?セッションを保存することはできますが、API呼び出しでこのセッションを検出するにはどうすればよいですか、1回のAPI呼び出しごとに渡す必要があるトークンがありますか?これに対する答えは非常に高く評価されます!

+2

最後に何をしましたか?既存の回答の1つが解決された場合、または独自の解決策を追加する場合は、回答を選択してください。 – tgkprog

答えて

7

私たちはdjangoのクッキーベースの認証を使用し、ログインとシングルページアプリケーション用に別のページを持っています。私たちのユースケースではうまく動作します。ここで説明したバックボーンベースのセッション管理システムを使用しています。backbone.js - handling if a user is logged in or not

+1

私はリンクされているものに似た何かをします。私は、認証(ログイン/ログアウト)のみを扱うモデルを持っており、サーバー側でそれが応答を返すことを確認します。成功またはエラーのコールバックは、私のアプリとビューがリッスンしているイベントを送信します。サーバーからの返信で、暗号化されたCookieセッションを送信し、各呼び出しで使用して認証されたことを確認します。 – jmk2142

+1

@orangewarp:あなたが説明したことは、私たちが必要とするもののように(正確ではないにしても)たくさん聞こえる。私たちはbackbone.jsではなくknockout.jsを使用しています。ソリューションの実装方法に関する詳細を提供する方法はありますか?たぶん、いくつかのコード例?ありがとう! – lmttag

4

私たちはAngular.jsを使用しています。また、ログイン用に別のページがあります。別のページには、HTTP XHR要求を使用してサーバーを呼び出し、ユーザー名とパスワードを送信する個別の単一ページ(およびセキュアな)アプリケーションがロードされます。サーバーが資格情報を認証した場合、javascriptコードはCookieを設定します。このクッキーは非セキュアアプリケーションである「反対側」から読み取ることができます。クッキーには、ユーザー名とパスワード、またはその他のセキュリティ保護された情報だけが格納されています。私たちは「Liorではない?ログアウト 'してください。注意すべき

だけの事は無期限有効期限を設定する角度のCookieメカニズムをオーバーライドすることであると、最も重要なのは、ルート・パス:

$document[0].cookie = 'username=' + escape($scope.userName) + ";expires=Thu, 01 Jan 2970 00:00:00 GMT; Path=/"; 
7

私は資格情報が流れるのOAuthクライアントに基づいています見た中で最もRESTfulな方法は、基本的に/トークンエンドポイントは、このセッションのアクセストークンを返すユーザー名/パスワードを投稿します。それ以降のすべてのAjaxリクエストは、Authorizationベアラヘッダーをトークンに付加します。トークンをグローバル変数に保存して、ページが更新/終了するまでローカルに保持したり、ローカル記憶域を使用してセッション間でユーザーをログインさせたり、JavaScriptのCookieを保持することができます。トークンのアイデアが気に入らなければ、とにかくAjaxリクエストで自動的に送信される古いクッキーの方法を使うことができます。

facebook/googleなどについては、通常、外部のユーザーログインをアカウントに関連付けるstackoverflowアプローチに従います。その後、かなり正常なサーバーベースのoauthダンスを使用してください(ただし、サーバーへのすべての要求をajax要求で置き換えることは可能ですが、とにかくサーバーとの間のリダイレクトが必要な場合はそれほど大きな違いはありません)。私は通常、Facebookのログイン用に暗号化されたCookieを発行します。これは上記と同様の方法でトークンに変換されます(ユーザー名/パスワードの代わりにリクエストでCookieを送信するだけです)。