我非常喜欢Hot Towel背后的概念,现在已经多次查看Pluralsight上的课程,以便真正了解正在发生的事情。
Hot Towel的一个方面真的让我无法理解 - 它如何用于需要不同用户角色的应用程序?课程中没有涉及认证和个性化的主题,并且似乎没有任何简单的方法来通过修改框架本身来实现这一点。
答案 0 :(得分:2)
当我第一次观看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服务的信息,可以根据您的方案进行调整。