【发布时间】:2014-01-18 04:31:16
【问题描述】:
我在理解多个项目中使用它的概念时遇到了问题。假设我有 4 个项目
- 业务.服务
- Presentation.MVC
- Presentation.WebApi
Business.Services 是所有业务逻辑和数据库连接发生的项目。 MVC,Web Api 项目引用服务调用业务逻辑。 MVC 和 web api 之间没有任何交互,因为在我的情况下它们完全用于不同的目的。 Web Api 仅代表处理移动客户端请求/响应。
在我的 MVC 项目中,我为我的用户提供了一个登录名,在成功登录后,我创建了FormsAuthenticationTicket,如果用户可用于指定的操作,我将在此票证的帮助下执行自定义授权。除此之外,我还根据 Authorization 中的FormsAuthenticationTicket 数据创建了 IPrincipal。设置后,我可以使用HttpContext.Current.User 之类的方式访问它。
另一方面,在我的 Web Api 项目中,所有请求都需要基本身份验证。有一个登录操作,用户需要发送 LoginName 和 Password 以获得将用于未来请求的令牌。一旦客户端检索到令牌,客户端就会在查询字符串的末尾添加 ?token 参数。当请求到达 Web Api 时,它会输入我的CustomAuthorizationAttribute 并再次检查用户是否有资格获得该请求。此外,我将Thread.CurrentPrincipal 和HttpContext.Current.User 设置为由令牌确定的IPrincipal 对象。
到目前为止,这些都很好。问题从这里开始。我想将 SignalR 放入我的 Presentation.WebApi 项目中。据我了解,OWIN 位于所有 MVC、WebApi 之上,因此,如果我们已经拥有身份验证系统,我们就不需要拥有身份验证系统。所以第一个问题是:我怎样才能在这个信号器上创建授权?我得到 Context.User(IPrincipal) 自然为空。看起来没问题,因为在我的 web api IPrincipal 对象是由 CustomAuthorizationAttrbute 中的每个请求设置的。此外,我如何授权来自Presentation.MVC 的用户?我应该为向他提供令牌的 mvc 用户提供一种新方法吗?我可以使用它的 FormsAuthenticationTicket 数据来授权吗?
【问题讨论】:
标签: c# asp.net asp.net-mvc asp.net-web-api signalr