我真的很喜欢 Hot Towel 背后的概念,并且已经看过 Pluralsight 上的课程几次,以便真正了解正在发生的事情。
Hot Towel 的一个方面确实让我难以理解——它如何用于需要不同用户角色的应用程序?课程中没有涉及身份验证和个性化的主题,并且似乎没有任何简单的方法可以通过修改框架本身来完成此任务。
我真的很喜欢 Hot Towel 背后的概念,并且已经看过 Pluralsight 上的课程几次,以便真正了解正在发生的事情。
Hot Towel 的一个方面确实让我难以理解——它如何用于需要不同用户角色的应用程序?课程中没有涉及身份验证和个性化的主题,并且似乎没有任何简单的方法可以通过修改框架本身来完成此任务。
当我第一次观看 Pluralsight 课程并开始处理需要执行身份验证和授权的应用程序时,我也遇到了同样的问题。
似乎问题不是特定于热毛巾模板,而是通常在使用 Web API 时出现问题。快速浏览 Web API 的 ASP.NET 概述提供了很多信息(http://www.asp.net/web-api/overview/security/authentication-and-authorization-in-aspnet-web-api)。如果您插入自定义 RoleProvider 和 ProfileProvider,那应该允许您重用该Authorize()
属性。
请注意,使用 REST 和 Web API 时,API 必须是无状态的,因此不存在会话。我发现文章提供了使Session[]
变量处于活动状态的解决方法,但决定不使用它。您可以使用对象缓存来实现相同的结果。
如果Authorize()
属性不适合您,您可以编写自己的授权过滤器。这个SO question可以提供更多信息(尽管它侧重于防止跨站点请求伪造,但在执行自定义 AuthZ 时,基本结构和如何使用过滤器是相同的)。
由于攻击者可以在浏览器端更改 Javascript 代码,因此仅依靠应用程序 JS 中提供的任何保护是不够的,必须在 Web API 层提供保护。身份验证和授权归结为保护 Web API,并且有大量信息可用于保护面向外部的 Web 服务,这些服务可以适应您的场景。