在 iPhone 应用程序中验证用户身份

2023-11-26

我正在为我们的 Web 应用程序开发 HTTP API。最初,API 的主要使用者将是我们正在开发的 iPhone 应用程序,但我在设计它时考虑到了未来的用途(例如其他平台的移动应用程序)。我正在尝试确定对用户进行身份验证的最佳方式,以便他们可以从 iPhone 访问他们的帐户。我有一个我认为效果很好的设计,但我不是安全专家,所以我认为在这里寻求反馈会很好。

用户身份验证的设计有 3 个主要目标:

  1. 良好的用户体验:我们希望允许用户输入一次凭据,并无限期地保持登录状态,直到他们明确注销为止。据我所知,如果不是因为 iPhone 应用程序的体验非常糟糕(即它在 Safari 中启动登录表单,然后告诉用户在身份验证成功时返回到应用程序),我会考虑 OAuth。 。
  2. 无需使用应用程序存储用户信用:我一直讨厌将用户密码存储在纯文本或对称加密的任何地方,因此我不希望应用程序必须存储密码才能将其传递给 API 以供将来的 API 请求。
  3. Security:我们绝对不需要银行应用程序的高度安全性,但我显然希望它是安全的。

总体而言,该 API 受 REST 启发(即将 URL 视为资源,并在语义上使用 HTTP 方法和状态代码)。对 API 的每个请求都必须包含两个自定义 HTTP 标头:一个 API 密钥(对于每个客户端应用程序来说是唯一的)和一个唯一的设备 ID。 API 要求所有请求都使用 HTTPS 发出,以便标头和正文被加密。

当前策略:

我的计划是有一个api_sessions 表在我的数据库中。它对 API 密钥和唯一设备 ID 具有唯一约束(以便设备只能通过给定应用程序登录到单个用户帐户)以及用户表的外键。

该 API 将有一个login端点,它接收用户名/密码,如果它们与帐户匹配,则让用户登录,为给定的 API 密钥和设备 ID 创建 api_sessions 记录。未来的 API 请求将使用 API 密钥和设备 ID 查找 api_session,如果找到记录,则将该请求视为在 api_session 记录引用的用户帐户下登录。

还将有一个logoutAPI端点,从api_sessions表中删除记录。

有人发现其中有任何明显的安全漏洞吗?


我同意 oAuth 的评论 - 你当然可以让 oAuth 在 iPhone 上很好地工作 - 用户体验完全取决于你。有一些机制(jQuery)可以从 oAuth 中提取 PIN 并使用它(无需用户在应用程序中重新输入 PIN)。这将用户体验降低到

1)显示网页(嵌入式控制中) 2)用户输入用户名和密码并按下按钮 3) 自动解析oAuth响应页面。

这个 twitter oAuth 实现就是这样做的http://github.com/bengottlieb/Twitter-OAuth-iPhone使用预先存在的 oAuth 库。

然而,回到你原来的问题。看起来不错。您唯一没有提及的项目是,您需要在网络应用程序上提供一种机制,以允许用户注销/取消授权设备会话(以防他们丢失设备)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 iPhone 应用程序中验证用户身份 的相关文章

  • 如何在 Google 知识图谱中搜索具有特定属性的条目?

    应如何制定搜索查询kgsearch googleapis com查找给定类别中的所有条目 例如 如果我想搜索 Schema org 类别中的内容应用类别 http schema org applicationCategory 我该怎么办呢
  • 允许的 APNS 持续连接数量是多少?

    我正在尝试编写服务器端代码来为我的应用程序发送推送通知 根据 Apple 的建议 我计划保留连接并根据需要发送推送通知 Apple 还允许打开和保留多个并行连接以发送推送通知 您可以与同一网关或多个网关实例建立多个并行连接 为此 我想维护一
  • Objective-C:在哪里定义宏以便随处可用?

    我有一个 iOS 应用程序 它在许多视图控制器中使用相同的字符串 数字等 所以我认为最好在一个文件中定义这些常量并在所有视图控制器实现中使用它 优点是更改一个数字 我只需要做一次 而不是在所有视图控制器中都使用该数字 实际上 我的 h 文件
  • iphone - 自动释放,没有池 - 只是泄漏

    我的主代码中有这一行 self performSelectorInBackground selector animateMe withObject nil 这是 animateMe void animateMe UIView animate
  • 是否有针对不同屏幕尺寸的单独故事板?

    基本上我已经完成了一个应用程序 我唯一的问题是 ATM 机应用程序在设计时只考虑了 4 英寸显示屏 当在 3 5 英寸模拟器上运行时 应用程序会丢失 0 5 英寸 显然 那么我的问题是 如何在 Xcode 5 中为不同的屏幕尺寸设置不同的故
  • 如何禁用 UITableView 中某些行的删除操作?

    我知道使用setEditing 启用UITableView的编辑模式 但我更喜欢禁用某些特定行的操作 启用其他行 是否可以 Thanks interdev 实施the tableView canEditRowAtIndexPath meth
  • 从 UIImagePickerController 相机视图推送 viewController

    我正在开发一款消息应用程序 类似于 WhatsApp 用户可以互相发送文本和图像消息 当用户想要发送图像时 他可以从相机胶卷中选择一张图像 也可以用相机拍摄一张图像 这就是我介绍的方式UIImagePickerController对于这两种
  • 如何打开定位服务

    当有人第一次拒绝时 如何从实际应用程序重新打开定位服务 我可以选择关闭或打开它 您只能提示他们在屏幕上打开定位服务 如下所示 UIApplication sharedApplication openURL NSURL URLWithStri
  • 如何将 NSDecimal 值转换为 NSInteger 值?

    我遇到一种情况 我得到一个 NSDecimal 并且我需要一个 NSInteger 我确实知道这是一个非常小的值 这是绝对肯定的 它不会大于 100 所以将它转换为 NSInteger 就完全没问题 不会发生溢出 这怎么可能做到呢 NSDe
  • 忽略触摸事件,让其下面的视图处理触摸?

    我有一个用户可以触摸的可拖动视图 但它的某些矩形将没有图像 alpha 0 当用户单击透明区域时 我能够在没有 alpha 信息的情况下构造透明区域 我希望透明区域下方的视图 同一类 来检测触摸 我的策略是当用户触摸透明区域时让视图忽略触摸
  • 有没有办法通过API调用访问私有数据集

    我正在使用 CKAN 2 8 运行 Mirth 3 6 1 作为新手 我遇到了一个问题 有没有办法通过 API 请求访问 CKAN 中私有数据集中的资源 我好像做不到 我有一个拥有公共数据集的组织 我可以通过 API 路由器通过 Mirth
  • 在 iPhone 中缝合图片

    我想并排缝合2张png 在Cocoa中 我会使用 NSImage initWithSize 然后只是drawInRect 但是 UIImage 没有 initWithSize 类 我现在该怎么做 Use UIGraphicsBeginIma
  • 如何阻止 UITableView moveRowAt IndexPath 在重新排序时留下空白行

    我遇到一个问题 在重新排序 UITableViewCells 时 tableView 不随单元格滚动 仅出现一个空白行 任何后续滚动都会出现数组越界错误 堆栈跟踪中没有我的任何代码 这是该问题的快速视频 http www screencas
  • UIView晃动动画

    我试图在按下按钮时使 UIView 摇动 我正在调整我找到的代码http www cimgf com 2008 02 27 core animation tutorial window shake effect http www cimgf
  • 在 UIScrollview 上显示缩略图的最佳方法是什么(从服务器下载)

    我想在 UIScrollview 如照片应用程序 上显示许多图像 作为缩略图 所有图像将从服务器下载 据我所知 有几种选择 1 通过创建 UIImageviews 然后将它们添加为主滚动视图上的子视图 2 通过子类化一个UIView类 然后
  • 如何删除 UITableView 中的缩进?

    首先 我对此很陌生 我很可能忘记了一些非常简单的事情 问题 我正在制作一个应用程序 在 a 中显示来自 imgur com 的随机图像tableView 由于某种原因 所有单元格都会缩进少量 如下图所示 我摆弄了许多设置storyboard
  • 使用 UITabBarController 时覆盖整个屏幕的视图?

    我想在 UITabBarController 设置中在整个屏幕上覆盖 HUD 样式的透明图形 执行此操作的按钮位于第一个选项卡的屏幕 FirstViewController 中 并且覆盖层也应该覆盖选项卡 这可能吗 您可以将新视图直接附加到
  • Glib 在 iPhone 应用程序中的使用

    我想基于现有的开源 Objective C 框架开发一个 iPhone 应用程序 但是该框架广泛使用了 glib 库 我找不到一种方法来构建和包含 iPhone 应用程序的 glib 库 非越狱 有什么办法可以做到这一点 或者有没有推荐的方
  • 使用 VB/ASP classic 可以向 API 发出 HTTP 请求吗?

    是否可以使用 ASP classic 向 Web API 发出请求 例如 像 Flickr API 这样简单的东西 或者这种东西很久以前就不支持了 这是很有可能的 Dim req Set req Server CreateObject MS
  • 从超立方体图像中获取文本的确切位置

    使用 tesseract 中的 GetHOCRText 0 方法 我能够检索 html 中的文本 并在 webview 中呈现 html 时 我能够获取文本 但图像中文本的位置与输出不同 任何想法都非常有帮助 tesseract gt Se

随机推荐

  • 在 Prometheus/PromQL 中合并/连接两个指标

    我有两个不同的 但相关的指标 metric 1 id abc id2 def metric 2 id abc id2 def 我的最终目标是在 Grafana 中实现以下功能 我计划使用 即时 值和 Grafana 的表格可视化小部件来显示
  • 土耳其语字符编码

    我尝试从不同的列表项创建新句子 当我用 unicode 打印它时 它给出错误 我可以正常打印 没有unicode 当我尝试将其发布到网站时 它出现了同样的错误 我认为如果我可以用 unicode 修复它 那么当我将其发布到网站时它就会起作用
  • 在 64 位计算机上使用 C# 和“BUILD x86”访问注册表

    我有一个应用程序 用 C 编写 在 Windows Server 2008 64 位 上运行 在此应用程序中 我必须检查一些有关 IIS 的注册表项 除其他外 我想访问密钥HKEY LOCAL MACHINE Software Micros
  • UnknownEntityTypeException:无法找到持久化器

    我想在 Wildfly 上使用 JPA 和 Spring 我尝试了这个配置 应用程序属性 spring jmx enabled false spring datasource jndi name java global production
  • 如何从 shell 检测 Mac OS X 中的当前区域设置

    我需要从命令行检测 OS X 中的当前区域设置 在 Linux Unix 上 我可以依赖 LANG 但并不总是设置它 http henrik nyh se 2007 10 displaying utf 8 Correctly in leop
  • 这两个查询是否相同 - GROUP BY 与 DISTINCT?

    这两个查询似乎返回相同的结果 这是巧合还是它们真的是一样的 1 SELECT t ItemNumber SELECT TOP 1 ItemDescription FROM Transactions WHERE ItemNumber t It
  • Android 自定义键盘 - 预览视图受限于父布局

    我创建了一个自定义键盘 它工作正常 除了顶部两行按键的预览视图显示得不够高 它们的垂直位置受到父布局的限制 这些屏幕截图说明了问题 0 和 8 的预览位置很好 但对于 5 和 2 则不然 键 0 的预览显示在按钮上方 键 8 的预览也显示在
  • 设备管理接收器在某些版本中无法工作

    我正在开发一款安全应用程序 可以保护设备免受陌生人的侵害 在我的应用程序中 如果用户尝试使用错误的 PIN 图案 密码解锁设备 我有一个功能应该从前置摄像头捕获图像 我有一个类似这样的代码 public class MyAdminRecei
  • 在 cython 中生成高斯随机数的最有效和可移植的方法是什么?

    我正在编写一个 cython 应用程序 我需要在紧密的嵌套循环中动态生成高斯随机变量 我希望在不引入任何额外依赖项 例如 GSL 的情况下执行此操作 对于我目前能够做到这一点的最小版本均匀随机即时数字 from libc stdlib ci
  • 带连接的 Codeigniter 活动记录更新语句

    这是我试图通过活动记录实现的查询 UPDATE Customer donations cd join Invoices i on i cd id cd cd id set cd amount 4 cd amount verified 1 W
  • Redis 和查询值

    Redis 在概念上与我使用的传统 SQL 数据库不同 我试图弄清楚它是否适合我的项目 我一直在四处寻找 但似乎找不到我的问题的答案 我需要存储一组用户 每个用户都有一个唯一的 ID 和多个与其关联的值 例如他们的姓名 看来我可以简单地将它
  • linq中如何处理空值?

    recordsList ListOfRecords new StudentRecordsBAL GetStudentsList Select q gt new StudentRecords RollNumber q RollNumber C
  • 如何为具有单个可为空成员的案例类编写 Play JSON 写入转换器

    在 Play 2 3 中 我有一个带有单个可选双成员的案例类 case class SomeClass foo Option Double 我需要一个 JSON 写入转换器来将成员处理为可为空 implicit val someClassW
  • 是否可以使用管道发送 ffmpeg 图像?

    我想将图像作为输入发送到 ffmpeg 并且希望 ffmpeg 将视频输出到流 webRtc 格式 我找到了一些信息 根据我的理解 这表明这是可能的 我相信 ffmpeg 可以从管道接收图像 有谁知道这是如何做到的 我想要发送图像作为输入到
  • Thread.Sleep() 不冻结 UI

    首先 我是初学者C 我想做这个 class2 method 79 null RoomItem 0 num num2 0 false true true System Threading Thread Sleep 250 class2 met
  • Gson 并反序列化其中包含数组的对象数组

    我正在尝试使用 Gson 反序列化从我的 web 服务返回的 json 字符串 该结构将返回为TypeDTO where TypeDTO is like int id String name ArrayList
  • python dict str() 函数可靠地对键进行排序吗?

    在Python中 两个字典 1 1 2 2 3 3 and 3 3 2 2 1 1 产生 1 1 2 2 3 3 str 何时执行 我可以依赖这种排序 或者至少依赖这样一个事实 包含相同键 值对的字典在通过 str 函数时会生成相同的字符串
  • x:Bind 中 ElementName 与 DataTemplates 的替代方案

    使用传统的 Binding 语法时 您可以指定元素名称以指向页面上的特定控件 并能够访问其属性 例如 如果页面名为page你可以这样做 Binding ElementName Page Path Name 随着 x Bind 它说的语法 使
  • 如何解决 WPF 设计器错误“类型 {0} 不支持直接内容”。

    以下 XAML 如下 在资源中定义了一个自定义集合 并尝试使用自定义对象填充它
  • 在 iPhone 应用程序中验证用户身份

    我正在为我们的 Web 应用程序开发 HTTP API 最初 API 的主要使用者将是我们正在开发的 iPhone 应用程序 但我在设计它时考虑到了未来的用途 例如其他平台的移动应用程序 我正在尝试确定对用户进行身份验证的最佳方式 以便他们