【发布时间】:2013-06-21 22:12:53
【问题描述】:
我真的很喜欢 Hot Towel 背后的概念,并且已经在 Pluralsight 上观看了几次课程,以便真正了解正在发生的事情。
Hot Towel 的一个方面确实让我难以理解 - 如何将它用于需要不同用户角色的应用程序?课程中没有涉及身份验证和个性化的主题,并且似乎没有任何简单的方法可以通过修改框架本身来完成。
【问题讨论】:
标签: hottowel
我真的很喜欢 Hot Towel 背后的概念,并且已经在 Pluralsight 上观看了几次课程,以便真正了解正在发生的事情。
Hot Towel 的一个方面确实让我难以理解 - 如何将它用于需要不同用户角色的应用程序?课程中没有涉及身份验证和个性化的主题,并且似乎没有任何简单的方法可以通过修改框架本身来完成。
【问题讨论】:
标签: hottowel
当我第一次观看 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 服务,这些服务可以适应您的场景。
【讨论】: