从手机(iPhone)应用ASP.Net的Web API(请在我的设计反馈)的请求进行身份验证(Au

2019-07-30 20:58发布

我设计一个网站,将拥有移动广告(仅限initally iPhone)。 该网站将是一个ASP.Net MVC 3应用程序。 我也将有一个ASP.Net的Web API网站(MVC 4)公开服务的iPhone应用程序。 iPhone应用程序将有它自己的形式从用户获取用户名和密码发送到JSON头的网络API。

我要考虑从一开始就安全性,而不是想后。 我不以任何方式安全专家。 我所做的研究一个很好的协议,看看其他的都是从web服务处理移动应用客户端的认证。 我想我已经想出了一个体面的解决办法,不涉及挂接到第三方oAuths。

我将不胜感激任何和所有的意见,建议,批评和一般WTFs任何你可以提供。 :)

我最大的担忧是:

  1. 确保到Web API的调用被授权
  2. 最大限度地减少重放攻击的风险(在下面的调用,因此时间戳)

iPhone应用程序将被开发成这样:
两个字符串是硬编码到iPhone应用程序(为每个用户相同的值):

  1. 应用程序ID
    这是一个用来识别客户正在访问的Web API(在iPhone,Android,Windows phone的,等)类型的字符串。

  2. 应用程序的散列盐
    这是用来盐哈希用户无关的请求字符串。

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

  1. API用户访问令牌
    这是在验证成功后由web API提供给客户机的字符串(令牌),并且允许客户端不发送在每个请求中的用户名和密码访问web API。
  2. 用户散列盐
    这是用来盐哈希针对建立用户帐户的请求字符串。



而iPhone将作出以下方式在网络API调用:

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

  • 新的帐户数据(用户名,密码,姓氏,名字等。)
  • 应用程序ID
  • UTC时间戳
  • UTC时间戳+应用程序ID的哈希加盐与应用程序的散列盐

API返回:

  • 新用户的哈希盐

    这里的想法是,在创建帐户时,我可以使用该应用程序的硬编码的盐,因为它不是一个巨大的安全隐患,如果是盐曾经得到了(通过反编译或其他方式)。

    但是对于那些访问和修改用户数据,我会使用由该用户只拥有,因此它不能被攻击者用来冒充他人盐的方法。


API方法:获取帐号
(用于获取用户的散列盐用于在网站上创建的,但尚未同步iPhone上的帐户。这种情况发生在用户尝试登录iPhone和iPhone检测到它已为该用户名没有记录。)

客户端发送:

  • 用户名
  • 密码(散列与应用的散列盐)
  • 应用程序ID
  • UTC时间戳
  • UTC时间戳+应用程序ID的哈希加盐与应用程序的散列盐

API返回:

  • 现有用户的哈希盐


API方法:登录(认证)
客户端发送:

  • 用户名
  • 密码(与用户的哈希散列盐)
  • 应用程序ID
  • UTC时间戳
  • UTC时间戳+应用程序ID的哈希加盐与用户的哈希盐

API返回:

  • API用户访问令牌


API方法:任何命令(即创建后,更新个人资料,获取信息,等...)
客户端发送:

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

Answer 1:

我的建议

  1. 身份验证和授权。 建立它在2台不同的服务器(在某些项目中,我已经使用3为好)。 反向代理服务器与这真的很好。 验证一台服务器上,并授权其为另一方。

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

  1. 封装一切。

  2. 使用SSL的所有安全信息。 在我来说,我使用它的一切。

  3. 为了您的时间戳选择一个合适的时间,你可以有授权。 不要让这个很短的应用程序将变得缓慢或持续时间过长,网络嗅探器可以访问的数据包。

如果你想有一个3服务器架构对于您的要求有一个应用程序键以及您用来生成一个快捷键(从服务器1)。 这个快捷键将其身份认证成功后(从服务器2),您可以使用该密钥授权从另一台服务器您的要求您的要求(服务器3)

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



Answer 2:

我这样做是使用asp.net mvc的4.0 /网页API的基本成员。 你可能会发现它有用。

是啊,使用SSL肯定

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



Answer 3:

在VS 2013,你可以使用“ASP MVC应用SPA”模板来生成一个工作的实施是产生在登录时的OAuth2令牌承载和使用授权它的WebAPI控制器调用[授权]属性。 它采用会员和Entity Framework存储用户和在SQL Server本地哈希。 只是删除你不需要的ASP MVC部分并保持的WebAPI的验证部分。 更多详细的活动: http://msdnrss.thecoderblogs.com/2013/09/understanding-security-features-in-the-spa-template-for-vs2013-rc/



文章来源: Authenticating requests from mobile (iPhone) app to ASP.Net Web API (Feedback requested on my design)