代码之家  ›  专栏  ›  技术社区  ›  James Black

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

  •  0
  • James Black  · 技术社区  · 14 年前

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

    但是,后来我想到了移动应用程序,我意识到,举例来说,Android将无法通过所需的认证,所以现在我一直在研究如何保护它。

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

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

    我现在关心的是GET请求,因为POST将以我期望的相同方法处理。

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

    另一种方法是将我的SSO解决方案放在这些服务前面,这样一来,如果人们没有凭据,他们将强制登录,因此身份验证将由SSO完成,并且由于Web服务目录可能是主SSO页的子目录,因此我可以解密通过这种方式cookie和获取用户名,但是,这会让移动用户感到恼火,其中包括高级管理层。

    那么,保护REST服务的一种方法是什么,以便知道是谁发出请求,以便做出授权决定,并将适用于iPhone、Android和黑莓智能手机。

    2 回复  |  直到 14 年前
        1
  •  0
  •   typemismatch    14 年前

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

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

    现在,另一种方法是让用户输入一个只有内部用户知道的“salt”或用户名和密码-设备获取一个令牌,然后在每个请求中传递它(在ssl上)。你公司之外没有人能做到这一点,所以这可能是最好的。我不能用这个,因为我的应用程序在应用程序商店。

    希望有帮助!如果您找到了一个好的解决方案,请告诉我们。

        2
  •  0
  •   James Black    14 年前

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

    然后,REST服务将查找该cookie,当您关闭浏览器时,该cookie将消失,我不关心cookie是否过期,我只需要从中获取用户名,然后我可以在配置文件中查找该用户是否可以使用该REST服务。

    这并不理想,我想做的是通过SSO代码重定向,然后让它将用户送回REST服务,但这并不像我希望的那样简单。

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

    推荐文章