小编Sto*_*oop的帖子

验证从移动(iPhone)应用程序到ASP.Net Web API的请求(在我的设计上请求反馈)

我正在设计一个拥有移动伴侣的网站(仅限初始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等)的客户端类型.

  2. 应用程序的散列盐
    这是一个字符串,用于为用户不可知的请求提供哈希值.

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

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



iPhone将以下列方式调用Web API:

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

  • 新帐户数据(用户名,密码,名字,姓氏等)
  • 应用程序ID
  • UTC时间戳
  • 使用应用程序的哈希盐盐化的UTC时间戳+应用程序ID的哈希值

API返回:

  • 新用户的哈希盐

    这里的想法是,在创建帐户时,我可以使用应用程序的硬编码盐,因为如果盐已经通过反编译或其他方式,它不会带来巨大的安全风险.

    但是对于访问和修改用户数据的方法,我将使用仅由该用户拥有的salt,因此攻击者无法使用它来模仿其他人.


API方法:获取帐户
(用于获取用户的哈希盐,用于在网站上创建但尚未在iPhone上同步的帐户.当用户尝试登录iPhone并且iPhone检测到它有没有该用户名的记录.)

客户发送:

  • 用户名
  • 密码(使用应用程序的哈希盐进行哈希处理)
  • 应用程序ID
  • UTC时间戳
  • 使用应用程序的哈希盐盐化的UTC时间戳+应用程序ID的哈希值

API返回:

  • 现有用户的哈希盐


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

  • 用户名
  • 密码(用户的哈希盐哈希)
  • 应用程序ID
  • UTC时间戳
  • 使用用户的哈希盐盐化的UTC时间戳+应用程序ID的哈希值

API返回:

  • API用户访问令牌


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

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

security iphone authentication token asp.net-web-api

49
推荐指数
1
解决办法
2万
查看次数

是否可以覆盖MultipartFormDataStreamProvider,这样就不会将上传保存到文件系统中?

我有一个ASP.Net Web API应用程序,允许客户端(HTML页面和iPhone应用程序)上传图像.我正在使用本文中描述的异步上载任务.

当我想要保存到文件系统时,一切都很好,因为这就是这个代码在幕后看起来自动执行的操作.但是,我不想将上传的文件保存到文件系统中.相反,我想使用AWS SDK for .Net获取上传的流并将其传递到Amazon S3存储桶.

我已将代码设置为将流发送到AWS.我无法弄清楚的问题是如何从Web API方法获取上传的内容流,而不是让它自动保存到磁盘.

我希望我可以在MultipartFormDataStreamProvider中覆盖一个虚拟方法,它允许我对上传的内容做其他事情,而不是保存到磁盘,但似乎没有.

有什么建议?

c# asp.net-web-api

31
推荐指数
2
解决办法
1万
查看次数

使用 ag-grid,当相邻单元格的 cellValueChanged 事件触发时,如何设置单元格的值?

每当用户编辑特定列中的单元格时,我想将它们的值复制到相邻的单元格,并从他们编辑的单元格中删除该值。从event对象中,我可以从已编辑的单元格中获取newValue,但我不知道如何获取对不同单元格的引用并设置其值。

gridColumnDefinitions = [
   {
      headerName: 'Column A',
      field: 'columnA',
      editable: true,
      onCellValueChanged: (event) => {
          var newValue = event.newValue;

          //Move new value to columnB and set this value to "".
          //How??
      },
    },
    {
      headerName: 'Column B',
      field: 'columnB',
      editable: false,
    }
]
Run Code Online (Sandbox Code Playgroud)

ag-grid angular

6
推荐指数
1
解决办法
7844
查看次数

我的iPhone应用程序正在使用Facebook SDK for iOS v2.0.我的应用程序会在2013年6月破坏吗?

我的Facebook上的应用程序有此警报:

此应用程序使用过时版本的Facebook SDK for iOS.请下载最新版本:iOS SDK 3.2.1.

了解最新版本如何更轻松,更快速地构建出色的移动应用.

我们还提供升级指南,以使过程尽可能简单.从SDK 2升级到3.1和3.1升级到3.2.

Facebook也将在2013年6月停止支持SDK的v2.0,因此建议您尽快升级到新的SDK.


这是否意味着Facebook SDK for iOS的v2.0将在2013年6月停止运行?或者,它仅仅意味着Facebook将停止为它提供技术支持和增强功能吗?

我的应用程序使用v2.0 SDK进行以下操作:

  1. 用Facebook登录
  2. 获取朋友列表
  3. 向所选朋友发送应用请求

由于时间和预算的原因,我可能无法将我的iPhone应用程序升级到版本3,直到今年年底.那么,这是否意味着我的iPhone应用程序将在6月份被打破?

facebook ios facebook-ios-sdk

5
推荐指数
1
解决办法
742
查看次数