validation从移动(iPhone)应用程序到ASP.Net Web API的请求(请在我的devise中提供反馈)

我正在devise一个网站,将有一个手机伴侣(初始只iPhone)。 该网站将是一个ASP.Net MVC 3应用程序。 我也将有一个ASP.Net Web API网站(MVC 4)公开服务的iPhone应用程序。 iPhone应用程序将具有自己的表单来捕获用户的用户名和密码,并将其发送到JSON头中的Web API。

我想从一开始就考虑安全问题,而不是一个想法。 我不是一个安全专家。 我已经做了大量的研究,看看其他人如何从Web服务处理移动应用程序客户端的身份validation。 我想我已经提出了一个体面的解决scheme,不涉及到第三方oAuths挂钩。

我将非常感谢您提供的任何意见,build议,批评和一般的WTFs。 🙂

我最大的担忧是:

  1. 确保对Web API的调用获得授权
  2. 最大限度地减less重播攻击的风险(因此下面调用中的时间戳)

iPhone应用程序将如此开发:
两个string被硬编码到iPhone应用程序(每个用户的值相同):

  1. 应用程序ID
    这是一个string,用于识别访问Web API(iPhone,Android,Windows Phone等)的客户端types。
  2. 应用程序的散列盐
    这是一个string,用于对用户不可知的请求进行哈希散列。

两个string存储在iPhone应用程序的本地数据库中(每个用户独特的值):

  1. API用户访问令牌
    这是通过Web API在成功validation后提供给客户端的string(令牌),并允许客户端访问Web API,而无需在每个请求中发送用户名和密码。
  2. 用户的哈希盐
    这是一个用于对已build立的用户帐户进行请求的哈希值的string。

iPhone将通过以下方式调用Web API:

API方法:创build帐户
客户端发送:

  • 新帐户资料(使用者名称,密码,名字,姓氏等)
  • 应用程序ID
  • UTC时间戳
  • UTC时间戳记哈希应用程序的哈希盐

API返回:

  • 新用户的哈希盐

    这里的想法是,当创build一个帐户时,我可以使用应用程序的硬编码盐,因为如果盐(通过反编译或其他方式)出来,这不是一个巨大的安全风险。

    但对于访问和修改用户数据的方法,我将使用仅由该用户拥有的盐,以便攻击者不能使用它来模拟其他用户。

API方法:获取帐户
(用于在网站上创build但尚未在iPhone上同步的帐户获取用户哈希值。当用户尝试loginiPhone时,iPhone会检测到没有该用户名的logging。)

客户端发送:

  • 用户名
  • 密码(使用应用程序的散列盐进行散列)
  • 应用程序ID
  • UTC时间戳
  • UTC时间戳记哈希应用程序的哈希盐

API返回:

  • 现有用户的散列盐

API方法:login(validation)
客户端发送:

  • 用户名
  • 密码(使用用户散列盐进行散列)
  • 应用程序ID
  • UTC时间戳
  • UTC时间戳+用户散列盐盐渍的应用程序ID

API返回:

  • API用户访问令牌

API方法:任何命令(即创buildpost,更新configuration文件,获取消息等…)
客户端发送:

  • 命令数据
  • API用户访问令牌
  • 应用程序ID
  • UTC时间戳
  • UTC时间戳记+应用程序ID + API用户访问令牌用用户的哈希盐进行盐渍

我的build议

  1. 身份validation和授权。 在2个不同的服务器上构build它(在一些项目中,我也使用了3个)。 反向代理服务器是非常好的。 在一台服务器上进行身份validation,然后在另一台服务器上授权。

这是我认为在使用Web API的移动安全中需要的最重要的一步。

  1. 封装一切。

  2. 对所有安全信息使用SSL。 在我的情况下,我使用它的一切。

  3. 为您的时间戳select一个合适的时间,您可以授权。 不要因为networking嗅探器可以访问数据包而使得应用程序变得太慢或太长,

如果您需要3服务器体系结构对于您的请求,还有一个应用程序密钥以及您用于生成访问密钥(从服务器1)。 此访问密钥将validation您的请求,在成功validation后(从服务器2),您可以使用该密钥来授权来自其他服务器(服务器3)的请求,

您提到的要求是标准规范。 真的没有看到这个问题。

在VS 2013中,您可以使用“Asp MVC SPA Application”模板生成一个工作实现,在login时生成Oauth2令牌承载,并使用[Authorize]属性为WebApi控制器调用授权。 它使用成员资格和entity framework在SQL Server本地存储用户和散列。 只需删除您不需要的asp mvc部分,并保留WebApi的Auth部分。 更多细节在这里: http : //msdnrss.thecoderblogs.com/2013/09/understanding-security-features-in-the-spa-template-for-vs2013-rc/

我做了使用asp.net mvc 4.0 / web api基本成员资格。 你可能会发现它有帮助。

是的,确定使用SSL

https://github.com/aamir-poswal/Mobile-Apps-Authentication-Authorization-ASP.NET-WEB-MVC-4.0