3

すべての HTML ビューを取得するために標準コントローラー (ApiController ではない) を使用する単一ページ アプリがあります。これは ajax を介して行われます。ただし、WebApi は、クライアントがバックエンド データベースと通信するために、breezejs を使用して利用されます。ASP.NET ID セキュリティを実装しています。MVC Cookie 認証またはベアラー トークンを使用する必要がありますか? 別のログイン ページを説明するためのソリューションが必要であり、クリーンなサーバー側のリダイレクトが必要です。

4

1 に答える 1

3

免責事項

これは非常に具体的であるため、比較的些細な質問であり、Web API と MVC コントローラーの認証の違いを理解すれば、かなり簡単に解決できるはずです。

仮定

  1. Web API プロジェクトには独自の認証があり、MVC プロジェクトと通信してセッション ユーザーなどを取得することはありません
  2. ASP.NET MVC コントローラーは、フォーム認証を使用し、ユーザーをセッション Cookie に保存するプロジェクト内にあります。
  3. 以下で MVC を参照すると、これらが ASP.NET MVC を参照していることがわかります。

おすすめ

私がすることは、MVC プロジェクトで認証に OAuth を使用し、設定および取得できるセッションの Cookie にユーザーを保存することです。次に、ビューを提供するコントローラー アクションを Authorize 属性で装飾できます。これにより、許可されていないビューにアクセスしようとすると、ユーザーはログイン ページにリダイレクトされます (web.config で設定されている場合)。

Web API プロジェクトの場合、2 つのプロジェクトを切り離しているように聞こえるため、Session に依存することはできません。これは私のお勧めです -

ユーザーが MVC プロジェクトで正常に認証されたら、Web API にオープン ログイン メソッドへの要求を行います。これにより、いくつかの論理テストが行​​われ、ユーザーが何らかのセッション トークンと共に DB に保存されるか、ユーザーが自動的に DB に書き込まれます。

これで、MVC プロジェクトのセッションに保存されたユーザーをクライアントに渡して、Web API への Breeze 呼び出しに追加し、それを認証に使用できます。そのトークンの有効期間などを明示的に設定する必要がありますが、これを Breeze.js 呼び出しに追加するのは非常に簡単です。

 var query = breeze.EntityQuery.from('myService').withParameters({'tokenId': thisTokenId});

これで、クエリは、認証に使用できる tokenId パラメーターを使用して API にヒットします。

編集

OAuth を使用するように ASP.NET MVC プロジェクトをセットアップする場合は、このリンクをたどることができます -

http://www.asp.net/mvc/tutorials/security/using-oauth-providers-with-mvc

フォーム ベースの認証とは、(簡単に言えば) 何らかのフォームを使用してログインする方法をユーザーに提供することを意味するだけであることに注意してください。

于 2013-11-11T17:49:23.857 に答える