すべての HTML ビューを取得するために標準コントローラー (ApiController ではない) を使用する単一ページ アプリがあります。これは ajax を介して行われます。ただし、WebApi は、クライアントがバックエンド データベースと通信するために、breezejs を使用して利用されます。ASP.NET ID セキュリティを実装しています。MVC Cookie 認証またはベアラー トークンを使用する必要がありますか? 別のログイン ページを説明するためのソリューションが必要であり、クリーンなサーバー側のリダイレクトが必要です。
1 に答える
免責事項
これは非常に具体的であるため、比較的些細な質問であり、Web API と MVC コントローラーの認証の違いを理解すれば、かなり簡単に解決できるはずです。
仮定
- Web API プロジェクトには独自の認証があり、MVC プロジェクトと通信してセッション ユーザーなどを取得することはありません
- ASP.NET MVC コントローラーは、フォーム認証を使用し、ユーザーをセッション Cookie に保存するプロジェクト内にあります。
- 以下で 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
フォーム ベースの認証とは、(簡単に言えば) 何らかのフォームを使用してログインする方法をユーザーに提供することを意味するだけであることに注意してください。