Flex,ASP.NET和SOAP或REST Web服务的最佳身份验证机制?

时间:2009-02-12 03:36:22

标签: asp.net flex web-services authentication authorization

我正在构建一个用ASP.NET和Flex编写的基于Web的应用程序。我面临的最大挑战之一是以灵活且可维护的方式实现应用程序的安全性。当涉及不同的技术时,这一挑战更加复杂。我将尝试描述下面的内容。

网站布局如下:

  • /mydomain.com/
    • 的Login.aspx
    • Default.aspx (主机flex [.swf]应用程序)
    • /行政/
      • AddUsers.aspx
      • AddRoles.aspx
      • AddPermissions.aspx
      • 等...
    • /服务/
      • SecurityService.asmx
      • MapService.asmx
      • PhotoService.asmx
      • 等...

我目前正在使用表单身份验证来保护网站上的资源。不在/ Services /文件夹中的所有页面/资源都需要经过身份验证的用户,如果尚未通过身份验证,则会重定向到Login.aspx。 .asmx页面允许未经身份验证的用户。为了保护这些资源,我在SOAP方法中抛出异常。这避免了重定向SOAP Web服务的页面,而我所知道的任何SOAP Web服务客户端都不支持这些页面。最后,SecurityService.asmx包含一个Login方法,允许Flex应用程序登录,如果cookie因任何原因到期,则不会重定向到Login.aspx页面。因为建立的cookie随任何请求一起发送到服务器,包括来自Flex应用程序的请求,这似乎工作得很好。

但是,这仍然是保护Web服务的一种糟糕方法。我觉得我正在使用表单身份验证来处理它不适合的事情。具体来说,我担心:

  • 当服务与核心网站分离时,此模型将不起作用。这是一个新发现的要求,我相信表单身份验证不会很好地工作(如果有的话)没有更多的修改和欺骗。
  • 其他Flex客户端可能需要访问服务。其中一些客户甚至可能无法使用cookie。如果是这样,这个模型会立即崩溃。这不是一个直接的要求,但众所周知,这是长期目标之一。
  • 我们最终(希望早日而不是更晚)转向基于REST的架构(与SOAP相比),因此任何解决方案都需要适用于SOAP和REST。

所以,我的问题是。

保护基于ASP.NET,Flex和SOAP或REST Web服务构建的应用程序的最佳身份验证和授权机制是什么?

注意:我正在积极研究OAuth;但是,我很难找到完整的例子来学习。此外,我需要能够根据用户拥有的权限过滤为给定用户返回的数据,OAuth似乎从令牌中删除了用户的身份。因此,我不确定OAuth如何应用于细粒度的安全模型。

6 个答案:

答案 0 :(得分:1)

其他人可能不同意,但实际上我并没有看到以现在的方式处理它的巨大问题;这可能就是我如何处理自己,至少在最初阶段。无论如何,即使在路上,您可能希望让Flex应用程序知道会话的身份验证状态,因此,如果这意味着直接检查ASP.NET会话令牌,或者您在设置时设置的其他cookie设置那一个,它似乎是一种优秀可靠的方式。

我确实看到了你对服务重定向的意思,但即便如此,使用表单auth,并不是特别是服务重定向的服务,就像ASP.NET应用程序本身一样。稍后,如果您需要使用其他身份验证方案,则可以考虑该方案的具体实现注意事项。除非您对使用表单auth感到担忧,否则可能不需要因为Flex客户端和Web服务而使您的方法复杂化。

答案 1 :(得分:0)

我承认我不太喜欢使用Web服务,但是要求访问密钥作为soap标头参数呢?任何可以与soap Web服务通信的客户端应用程序都可能具有用于修改soap请求的低级API,并且使用访问密钥允许(理论上)限制服务的使用。谷歌,亚马逊和其他几家提供商对他们的网络服务使用这种类型的身份验证,它似乎运作良好。

This article似乎可能是一个开始的好地方......

答案 2 :(得分:0)

我认为最好有独立的身份验证系统 - 即使用户和后端的auth令牌之间存在关系。他们是不同的野兽,具有不同的能力和需求。

对flex部分使用普通形式的auth。那很好。

对于Web服务,您可以创建一个登录方法,该方法返回一些auth令牌,后续任务将使用该令牌执行。或者在Web服务中添加一些字段(在标题中发布或作为参数),以便每次都使用用户ID /密码组合进行身份验证。

附注:我不会依赖soap异常来处理身份验证问题。但是,如果您发送带有WS请求的身份验证令牌或用户/传递,则无需担心重定向。

编辑: RE:评论 - 理想情况下有。有些产品(Tivoli访问管理器)可以满足这些需求,但它们很昂贵。

我给出了这个建议,因为它减轻了允许访问替代客户端的痛苦,只要您正确设计了服务,它就是无状态的。它还为您提供了对服务端数据级访问的更精细控制。

答案 3 :(得分:0)

CodePlex上发布的WCF Security Guide可以帮助您,如果您正在使用,或者可以使用WCF。

我认为还有Microsoft's Web Services Enhancements (WSE) 3.0实现了一些WS- *安全规范。

希望有所帮助。

答案 4 :(得分:0)

如果您将服务移至其他地方,则如果两个Web应用程序在web.config中具有相同的machineKey,则可以重复使用标准ASP.net身份验证cookie。

据我所知,FLEX将尊重asp.net身份验证cookie,因为它将通过浏览器发出http请求,浏览器将传递http cookie(包括asp.net身份验证票证),就像普通的http请求一样。 / p>

您是否尝试使用普通的asp.net身份验证保护您的网站和服务?

答案 5 :(得分:0)

请参阅Web Services authentication - best practices?

Dave Dunkin写道:

  

最简单的方法来处理它   各种平台都是使用HTTP   基本身份验证和HTTPS   传输层。 WS-Security将是   如果你的需求超越简单就好了   用户名/密码,但支持是   会发生很大变化   平台。 HTTP身份验证是   每个体面的SOAP支持   实施

和我的Custom HTTP Basic Authentication for ASP.NET Web Services on .NET 3.5/VS 2008