验证从移动(iPhone)应用程序到ASP.Net Web API的请求(请在我的设计中提供反馈)如何实现?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (17)

我正在设计一个网站,将有一个手机伴侣(仅限初始iPhone)。该网站将是一个ASP.Net MVC 3应用程序。我还会有一个ASP.Net Web API站点(MVC 4)来向iPhone应用程序提供服务。iPhone应用程序将拥有自己的表单来捕获用户的用户名和密码,并将其发送到JSON标头中的Web API。

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

我将非常感谢您提供的任何意见,建议,批评和一般WTF。:)

我最大的担忧是:

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

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

  1. 应用程序ID 这是一个字符串,用于标识访问Web API(iPhone,Android,Windows Phone等)的客户端的类型。

  1. 应用程序的哈希盐 这是一个字符串,用于对用户不可知的请求进行哈希散列。

两个字符串存储在iPhone应用程序的本地数据库中(每个用户唯一的值):

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

iPhone将通过以下方式调用Web API: API方法:创建帐户 客户端发送:

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

API返回:

  • 新用户的散列盐 这里的想法是,当创建一个帐户时,我可以使用应用程序的硬编码盐,因为如果盐(通过反编译或其他方式)出来,这不是一个巨大的安全风险。 但对于访问和修改用户数据的方法,我将使用仅由该用户拥有的盐,以便攻击者不能使用它来冒充他人。

API Method:Get Account (用于为网站上创建但尚未在iPhone上同步的帐户获取用户散列盐。当用户尝试登录iPhone并且iPhone检测到它存在时会发生这种情况没有该用户名的记录。) 客户端发送:

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

API返回:

  • 现有用户的散列盐

API方法:登录(身份验证) 客户端发送:

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

API返回:

  • API用户访问令牌

API方法:任何命令(即创建发布,更新配置文件,获取消息等) 客户端发送:

  • 命令数据
  • API用户访问令牌
  • 应用程序ID
  • UTC时间戳
  • UTC时间戳记+应用程序ID + API用户访问令牌,用户的哈希盐含盐量
提问于
用户回答回答于

我的建议

  1. 认证和授权。在2个不同的服务器上构建它(在一些项目中,我也使用了3个)。反向代理服务器对此非常好。在一台服务器上进行身份验证并在另一台服务器上进行授权。

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

  1. 封装一切。
  2. 对所有安全信息使用SSL。在我的情况下,我使用它的一切。
  3. 为你的时间戳选择一个合适的时间,你可以授权。不要因为网络嗅探器可以访问数据包而导致应用程序变得太慢或太长,所以不要这么做。

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

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

用户回答回答于

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

扫码关注云+社区