2011-09-07 55 views
9

我们正在构建新的Web应用程序堆栈。后端功能将主要基于服务,但由于其中一些服务需要暴露于公共互联网,我需要保护它们。我部分成功地通过使用标准成员/角色提供者模型来锁定服务URL。我现在遇到的问题是,如果我们要在服务堆栈之上构建一个iOS(或Android)应用程序,我们将如何去处理安全问题?我应该如何确保我的WCF Rest/JSON服务与iOS/Android应用程序一起使用?

我完全接受建议。到目前为止,我在下面列出了一些信息。

  1. 使用SQL Membership/Role Provider/Forms的ASP.NET网站在HTTPS连接上运行的身份验证。只有默认/登录/常见问题页面可公开访问。所有其他页面都位于名为“/ Secure”的文件夹中,这需要您进行身份验证。

  2. WCF WebService。所有支持的功能都是通过此服务提供的。端点仅在本地Intranet上可用。 ASP.NET网站代码隐藏与使用标准服务参考的服务对话。

  3. WCF REST/JSON服务。上述一些功能重新包装在WCF REST/JSON服务中。这是使用“WCF REST Template 40”设置的。该服务然后使用System.Web.Routing路由到“/ Secure/jsonsvc/*”。因为它位于/ Secure文件夹下面,所以它会继承任何请求的成员资格/角色提供者安全性。例如xmlhttp从客户端JQuery小部件调用此服务,仅适用于已登录到我们网站的用户。

  4. 未来,这些相同的WCF Rest/JSON服务可能需要由外部应用程序(例如,iPad应用程序)使用。考虑到缺少HTTP站点/会话/登录上下文,最好的方法是什么?

+0

您在#1中提到的身份验证机制是否也作为#3中的Web服务的一部分公开? – momo

+0

你的意思是...是否有会员供应商登录方法的webservice版本。不,没有。我不确定那将如何工作。即使我公开了一个采用用户名和密码的方法,它会返回什么。当前版本将ASPXAUTH cookie值作为浏览器xmlhttp请求的一部分。你将如何在本地客户端中模拟这一点。 –

+0

对于我们构建的大多数应用程序,Web服务的登录调用将返回会话令牌,以便随后的Web服务调用必须包含该会话令牌。您可能会对我最近回答的问题感兴趣,这个问题可以在http://stackoverflow.com/questions/7296729/handling-login-functionality-for-native-app-connecting-to-web-service/7296764#7296764上找到。它可能适用于你的情况。 – momo

回答

11

如您所知,ASP.NET表单身份验证使用cookie来维护您的身份验证会话。除了有关这是否是在REST方法下处理事物的最佳方式的任何争论之外,我没有看到为什么您无法在iOS应用中使用相同的Cookie的技术原因。

您显然需要一个简单的登录网页(通过UIWebView在您的应用程序中显示)或登录REST方法来首先将cookie返回给您,然后在随后的请求中您只需返回cookie与请求(这里是一点点information on handling cookies in iOS using the ASIHTTP library)。

需要记住的几件重要的事情是,您无法控制设备所在的无线网络,所以您一定要使用SSL,并且您应该考虑失败/重试/等等用于登录REST方法,就像您登录页面的方式一样(如果不是更多的话)。

希望有帮助!

+2

+1好帖子。请查看[FormsAuthentication Class](http://msdn.microsoft.com/zh-cn/library/system.web.security.formsauthentication.aspx)。您应该可以调用['Authenticate'](http://msdn.microsoft.com/zh-cn/library/system.web.security.formsauthentication.authenticate.aspx)和['SetAuthCookie'](http:/ /msdn.microsoft.com/en-us/library/twk5762b.aspx)从存在于其他受保护的wcf服务之外的Web服务。一旦通过身份验证,请确保您仍然在后续请求中传递身份验证Cookie。 – Sam

相关问题