2015-11-26 7 views
12

私は最初のASP.NET Web APIアプリケーションを作成しています。私は他のWebアプリケーションフレームワーク(主にSymfonyだけでなく、Djangoや、それほどではないRoR)にも精通しています。リクエストを介した状態の取得と永続化

リクエストがブラウザ/フロントエンドクライアントからWebサーバーに送信された後に発生するイベントのシーケンスを理解するために少し苦労しています。

DBバックエンドを使用するマルチテナントアプリケーションを作成しています。私はデータベースにアクセスするためにADOと未処理のSQLを使用しています。また、ユーザーごとに多くの情報を格納する必要があります。そのため、基本的には、プリロードされたコンテキストをユーザーに対して作成(またはキャッシュからフェッチ)します。

ここには、ASP.NETで達成しようとしているものを示す疑似コードがあります。すなわち

  • は、アプリケーション・コンテキストを作成し、私のような状況の機密情報を取り込むことが可能な

    namespace myApp.Controllers 
    { 
        public class FoobarController : ApiController 
        { 
         public Response doLogin(request) 
         { 
          var ctx = myApplicationContext.getInstance(); 
          var user = ctx.getUser();  
    
          if (!user.isLoggedOn()) 
          { 
           username = request.getParameter('username'); 
           password= request.getParameter('password'); 
    
           dbManager = ctx.getDbInstance(); 
    
           resp = dbManager.internalLogin(username, password); 
    
           // Load permissions etc for current user, from db 
           // Store user info in cache .. 
          } 
         }  
    
         public Response ActionOne(request) 
         { 
          ctx = myApplicationContext.getInstance(); 
          user = ctx.getUser(); 
    
          if (user.hasPermission('xxx')) 
          { 
    
          } 
         } 
        } 
    } 
    

    私の質問は、私はこの種の機能を実装するのですか、ですメーラーの設定、オブジェクトファクトリ、その他の状態情報など。

  • ユーザオブジェクトにアクセスすることができますdユーザーの資格情報、アクセス許可など)

  • セッション変数などにアクセスできますか?

ノート

  1. 私はLinux上でWebアプリケーションを展開することになる、と私は、WebサーバーとしてApacheを使用することになります。
  2. 私は、Azure、Windows認証など(C#とASP.Net以外の)Microsoft技術を使用したくないです。
  3. エンティティを使用していないrawデータベース接続を使用したいのですがマネージャー(レガシーアプリケーションポート)
+2

あなたはOWINとASP IDを調べましたか?アイデンティティは、OWINと同様、最近ASPアプリケーションのテンプレートに付属しており、すべての認証のニーズを処理します。 OWINは他のすべてのもの(理論的には)が置かれているより基本的なフレームワークです。学習のために独自の認証フレームワークを構築しようと思っているなら、私はOWINを使い始めます。 ASP.netのWebサイトにはいくつかのチュートリアルがあります。 –

答えて

5

私は、要求がWebサーバーに、ブラウザ/フロントエンドクライアントから送信された後に発生するイベントのシーケンスを理解するために、少し苦労しています。

この場合、this PDF Posterは、ASP.NET WebAPIで要求処理を最もよく表しています。すなわち

  • は、アプリケーション・コンテキストを作成し、私のような状況 機密情報を取り込むことが可能な

    私の質問は、私はこの種の機能を実装するのですか、ですデータベース接続、メーラ 構成、オブジェクトファクトリ、その他の状態情報など

  • アクセス(私はパーミッションなどに、ユーザーの資格情報を追加することができます)ユーザーオブジェクト

  • は、セッション変数などへのアクセスをお持ちですか?私は言うだろう。このため

は、WebAPIsがステートレスになるように設計されているので、最善のアプローチは、(セイ、データベース内の)永続的なセッションを作成し、セッションの識別子を使用することです(セッション・キーまたはトークンなど)ユーザを識別し、彼のセッション変数/コンテキスト情報をフェッチするための各要求について、

ここで、あなたの例で求められている種類の機能を実装するには、認証フィルタと認証フィルタ(More details on implementing them here)を組み合わせてください。

WebAPIの各要求は、最初にハンドラによって処理され、要求されたアクションの実行前にフィルタが適用されます。あなたの例では、認証フィルタはDoLogin機能を保持し、user.hasPermissionロジックは認証フィルタに存在し、アクションロジックのみがコントローラのアクション(機能)に存在します。

enter image description here

+0

あなたの答えをありがとう。しかし、私はすでにpdfの回路図を知っていた。残念ながら、読者が既にASP.Netクラス/名前空間などに精通していることを前提としているので、あまり役に立ちません。私が探していたのは、ワークフローの概念をフレームワーククラスにマップした図でした。設計されたIMHOを見渡す。そのすべてに失敗した場合、私自身の認証フィルタと認可フィルタをどのように作成できるかを知ることは、少なくとも役に立つでしょう。 –

+0

真っ向から言えば、ダイアグラムは一見したところで私にも見えました。しかし、いったんWebAPIの基本的な理解が得られれば、私は自分自身に必要な明確化のためのワンポイント・ストップとなりました。このリンクは、認可と認証の実装の詳細を示します。私も私の答えでこれを更新します。 - http://www.asp.net/web-api/overview/security/authentication-and-authorization-in-aspnet-web-api – Guanxi

関連する問題