我正在构建一个用 ASP.NET 和 Flex 编写的基于 Web 的应用程序。我最大的挑战之一是以灵活和可维护的方式实现应用程序的安全性。当涉及不同的技术时,这一挑战变得更加复杂。我将尝试在下面描述我所拥有的。
该网站的布局如下:
- /mydomain.com/
- 登录.aspx
- Default.aspx (宿主 flex [.swf] 应用程序)
- /行政/
- 添加用户.aspx
- 添加角色.aspx
- 添加权限.aspx
- ETC...
- /服务/
- 安全服务.asmx
- 地图服务.asmx
- 照片服务.asmx
- ETC...
我目前正在使用表单身份验证来保护网站上的资源。不在 /Services/ 文件夹中的所有页面/资源都需要经过身份验证的用户,如果尚未经过身份验证,它们将被重定向到 Login.aspx。.asmx 页面允许未经身份验证的用户。为了保护这些资源,我在 SOAP 方法中抛出了一个异常。这避免了我所知道的任何 SOAP Web 服务客户端都不支持的 SOAP Web 服务重定向页面。最后,SecurityService.asmx 包含一个 Login 方法,允许 Flex 应用程序登录而无需重定向到 Login.aspx 页面,如果 cookie 因任何原因过期。因为建立的 cookie 与任何请求一起发送到服务器,包括来自 Flex 应用程序的请求,所以这似乎工作得很好。
然而,这仍然是一种保护 Web 服务的糟糕方法。我觉得我正在将表单身份验证用于它不打算用于的东西。具体来说,我担心:
- 当服务与核心网站分离时,此模型将不起作用。这是一个新发现的要求,我相信如果没有更多的修改和技巧,Forms Authentication 将无法正常工作(如果有的话)。
- Flex 以外的客户可能需要访问服务。其中一些客户端甚至可能无法使用 cookie。如果是这样,该模型立即分崩离析。这不是即时要求,但众所周知,这是长期目标之一。
- 我们最终会(希望早点而不是晚点)转向基于 REST 的架构(相对于 SOAP),因此任何解决方案都需要适用于 SOAP 和 REST。
所以,我的问题是。
保护基于 ASP.NET、Flex 和 SOAP 或 REST Web 服务构建的应用程序的最佳身份验证和授权机制是什么?
注意:我正在积极研究 OAuth;但是,我很难找到完整的例子来学习。此外,我需要能够根据用户拥有的权限过滤给定用户返回的数据,OAuth 似乎从令牌中删除了用户的身份。因此,我不确定 OAuth 如何应用于细粒度的安全模型。