保护移动和桌面应用程序可访问的REST服务的最佳方法

时间:2010-10-04 00:06:43

标签: wcf rest mobile-phones security

我有计划使用Windows集成身份验证(NTLM)保护的REST服务,因为它只能由公司内部人员访问,并且最终会出现在公众可访问的网站上。

但是,然后我考虑了移动应用程序,并且我意识到Android,例如,无法传递所需的凭据,所以现在我被困在如何保护它。

这是在WCF 4.0中编写的,我的想法是获取凭据,然后确定用户是谁,然后检查他们是否可以使用GET请求并查看数据。

我不想强制用户传递密码,因为这将在IIS日志中,因此是一个安全漏洞。

我目前关注的是GET请求,因为POST将通过我期望的相同方法处理。

我认为不是一个好的选择的一个解决方案是让他们登录Sharepoint,然后只接受来自Sharepoint的转发请求。

另一种方法是将我的SSO解决方案放在这些服务之前,如果他们没有凭据就会强制人们登录,因此身份验证将由SSO完成,因为Web服务目录可以是主SSO页面的子目录,然后我可以解密cookie并获得用户名,但是,这对于包括高级管理层在内的移动用户来说会很烦人。

那么,什么是保护REST服务的方法,以便知道谁在提出请求以便做出授权决策,并且适用于iphone,android和黑莓智能手机。

2 个答案:

答案 0 :(得分:0)

我有同样的问题,所以让我给你详细信息,也会感激反馈。由于您使用的是内部系统,因此我列出了一个额外的选项。

我的第一个选择并不完美,是的,它可能被黑客攻击但仍然 - 总比没有好。对于每个请求,您都会传递设备的唯一标识符以及哈希值。您可以使用应用程序中嵌入的salt以及id生成哈希。在服务器上,您将传入的哈希与您在服务器上生成的哈希与传递的唯一标识符进行匹配。如果有人“扎根”他们的设备,并且足够聪明他们可以找到盐 - 你可以进一步模糊它,但最终它可能被盗。此外,我保留所有SSL请求,以帮助隐藏进程。我对这个过程的“改进”是在每次请求后传回新的盐。新设备有一次机会获得下一个盐或被锁定......不确定该步骤。

现在另一种方法,是让用户输入“盐”或用户名和密码仅内部用户会知道 - 所述设备获得的令牌,然后与每个请求传递给它(在SSL)。贵公司以外的任何人都无法获得,所以这可能是最好的。由于我的应用程序位于应用程序商店,我无法使用此功能。

希望有所帮助!如果您找到了一个好的解决方案,请大家知道。

答案 1 :(得分:0)

我目前的解决方案,为了保护系统中的数据,是强迫人们首先登录到REST服务支持的应用程序(我们的学习管理系统),因为我已经编写了一个将写出的SSO解决方案带有加密数据的cookie。

然后,REST服务将查找该cookie,当您关闭浏览器时它会消失,我不在乎cookie是否已过期,我只需要用户名,然后我可以查看配置文件查看是否允许该用户使用该REST服务。

这不太理想,我想要做的是重定向SSO代码,然后将其发送回REST服务,但这并不像我希望的那么简单。

我的SSO代码有很多重定向,并会将某人重定向到他们在学习管理系统中选择的位置,我只需要让它与其他应用程序一起使用。