2015-11-26 121 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应用程序,我将使用Apache作为Web服务器。
  2. 为了这个项目的目的,我不想使用Azure,Windows Authentications等任何微软技术(除了C#和ASP.Net)
  3. 我想使用原始数据库连接,而不是使用实体经理(遗留应用程序接口)
+2

你看过OWIN和ASP身份吗?目前,Identity与ASP应用程序的模板一样,同OWIN一样,它将处理您所有的身份验证需求。 OWIN是其他所有(理论上)所在的更基本的框架 - 如果您希望构建自己的认证框架以供学习,那么我将从OWIN开始。在ASP.net网站上有一些教程。 –

回答

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类/名称空间等。我在寻找的是一个将工作流中的概念映射到框架类的图 - 看起来在设计恕我直言。如果没有这些,至少看看我可以编写自己的认证和授权过滤器是有用的。 –

+0

真正的说这就是图表在第一眼看到我的样子。但是,一旦我对webAPI有了基本的了解,这个投票率就成为我需要的任何澄清的一个中止点。该链接提供了更多关于实施授权和认证的细节。我也会在我的回答中更新这个。 - http://www.asp.net/web-api/overview/security/authentication-and-authorization-in-aspnet-web-api – Guanxi