使用 Swift 将 NSHttpCookie 存储在 iOS 钥匙串中

2024-02-29

我有一个以 HTTP cookie 形式从 Web 服务收到的身份验证令牌。目前,我依赖于 iOS 的默认行为,即将从 HTTP 请求返回的 cookie 存储在NSHTTPCookieStorage保留 cookie 直到用户关闭应用程序的对象。

但是,我想在钥匙串中的应用程序生命周期之间保留 cookie,以便当用户重新打开应用程序时,如果他们的 cookie 没有过期,他们将不需要再次登录。似乎没有一种简单的方法可以将通用对象存储到钥匙串中,因此似乎最好的途径是序列化通过检索的字典对象NSHTTPCookie's property到一个字符串并将其存储在钥匙串中。然后我可以通过重建cookieinitWithProperties构造函数在NSHTTPCookie并将其放回NSHTTPCookieStorage object.

在 Swift 中做到这一点最简单的方法是什么?我发现苹果编写的名为“KeychainItemWrapper”的代码,但它的文档非常参差不齐,而且它似乎是为了存储用户的电子邮件(或用户名)和密码而设计的,而不是通用对象。是否有更简单的方法来使用钥匙串,或者有更好的方法来安全地存储 Web 服务的身份验证令牌?


您应该检查 SSKeychain:https://github.com/soffes/sskeychain https://github.com/soffes/sskeychain。它在钥匙串 API 上有一个非常漂亮且可用的界面。

它本身不是 Swift,但您仍然应该能够在 Swift 应用程序中使用它。我认为没有办法存储对象本身,但正如您提到的,您可以将 cookie 序列化为字符串并将其保存在钥匙串中。

下面的示例说明了如何使用它。

NSString * const LoginService = @"com.example.loginService"; // unique identifier shared across your apps to identify various services your app may provide that require the keychain

NSString *cookie = // cookie string
NSString *userAccountIdentifier = // could be an email, username, id, or some other way to uniquely identify the user

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

使用 Swift 将 NSHttpCookie 存储在 iOS 钥匙串中 的相关文章

随机推荐

  • 使用 boost asio 创建 iostream 并指定 ip 和端口

    我有一个关于 boost asio 库的问题 我成功地尝试在客户端和服务器之间创建一个套接字 这涉及创建解析器以便指定服务器的IP和端口 服务器只需要端口 和其他对象 但是 最重要的是 有必要使用write and read some作为从
  • x86 组装pushad/popad,速度有多快?

    我只是想在 x86 汇编中制作非常快速的基于计算的程序 但我需要在调用程序之前推送累加器 计数器和数据寄存器 手动推送它们更快 push eax push ecx push edx 或者只是使用 pushad 和 pop 一样 谢谢 如果你
  • 我可以在iOS7中更改datePicker的字体颜色吗?

    刚刚下载了我的 xcode 5 副本 想知道是否有人知道如何更改日期选择器中字体的颜色或大小 我的应用程序需要类似的东西 但最终还是走了很长一段路 遗憾的是 没有更简单的方法可以简单地切换到 UIDatePicker 的白色文本版本 下面的
  • 主机卡模拟 Android 4.4

    既然 Android 在带有 Android 4 4 的 Nexus 5 上支持卡模拟 是否可能会出现一些应用程序 允许我有效地复制智能卡 例如 在办公室开门的智能卡 并在其位置使用我的手机 会非常方便 Cheers 不 这不太可能 通常
  • 远程进程执行

    我的场景是使用 C Net 连接到远程计算机 并列出该远程计算机的所有进程 我可以终止一个进程 或者远程启动一个新进程 问题是 当我在远程执行新进程时 我可以在任务管理器上看到该进程 但它不会出现在 Windows 屏幕上 知道为什么它没有
  • 发布后运行 exe 时出错:“此程序可能未正确安装”

    为什么在我发布项目后 我无法在关闭项目后仅运行我的 exe 您在 调试 文件夹中找到的那个 而不收到此错误消息 因此不使用我发布的项目 仍然只使用 exe 我创建了一个测试项目只是为了测试是否是这种情况 并且每次都会发生这种情况 创建一个新
  • 如何在Elasticsearch中查询IP范围?

    我想在ELK中查询IP范围 172 16 0 0到172 31 0 0 我尝试了两种查询方法 但都失败了 query bool should regexp DstIP 172 3 0 1 1 6 9 2 0 9 minimum should
  • 如何在 Awk 中使用单个正则表达式提取多个字符串

    我有以下字符串 Mike has XXX cats and XXXXX dogs MikehasXXXcatsandXXXXXdogs 我想将 Xs 替换为与 Xs 数量相对应的数字 I tried awk match 0 X a leng
  • 无法安装文本

    使用命令pip install textract我无法在 Ubuntu 16 04 Python 2 上安装 texttract 我收到以下错误 Collecting textract Requirement already satisfi
  • 如何从CollectionType中获取随机元素?

    这是我的示例代码 import Foundation ar4random uniform extension CollectionType where Self Index Distance Int var randomElement Se
  • 是否可以在模拟器上使用已发布的即时应用程序(BuzzFeed、Wish 等)?

    我已经在模拟器上运行了一个 hello world 即时应用程序 如下这个谷歌的教程 https developer android com topic instant apps getting started first instant
  • 如何在 PHP 中实现数字签名

    我必须在我们用 PHP 打印为 PDF 的证书中实现数字签名 该要求类似于注册商或子注册商等授权人员对证书进行数字签名 实施数字签名背后的基本思想是要知道 证书是由授权人数字签名的 并且是该授权人或其他没有权限的人创建的 注册商 分注册商对
  • PostgreSQL 有一个好的数据库建模工具吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 在同一项目中跨表单使用类[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 假设我有一个具有几种不同形式的项目 Form1 Form2 Form3我还有一堂课叫CustomTools其中包含常用的验证程序和功能 cl
  • 计算两条曲线之间的面积

    我有一个包含曲线和直线的代码 我知道如何填充线下方和下方的区域 但我需要计算每个区域的面积值 这是代码 import matplotlib pyplot as plt import numpy as np x np arange 0 0 2
  • mamp mysql 无法启动

    我的 mysql 服务器有问题 当我启动 MAMP 时 Mysql 服务器不会启动 我尝试更改端口但没有帮助 我检查错误日志 发现以下内容 161010 09 21 07 mysqld safe Starting mysqld daemon
  • iPhone iOS UILabel 如何仅自定义 UITableView 详细文本标签的文本颜色?

    我正在开发一个界面原型 并使用故事板来实现 原型的一部分涉及将 UITableView 单元格的详细 UILabel 设置为某种颜色 我想避免必须手动重新着色故事板中的每个标签 我发现我可以使用 UILabel appearanceWhen
  • 多处理中的加入超时

    我有一个虚拟示例 我想在其中应用多重处理 考虑一个场景 其中有一串数字 我称之为帧 逐一传入 我想将其分配给当前可用的任何单个进程 所以我创建了 4 个正在运行的进程while循环 查看队列中是否有任何元素 然后对其应用函数 问题是当我jo
  • 在struts中从Angular 2发送和接收http post数据

    我正在尝试将 http post 数据从 Angular 4 代码发送到 struts 操作 Struts 操作正在被调用 但无法接收数据 给我一个错误 java lang ClassCastException java lang Inte
  • 使用 Swift 将 NSHttpCookie 存储在 iOS 钥匙串中

    我有一个以 HTTP cookie 形式从 Web 服务收到的身份验证令牌 目前 我依赖于 iOS 的默认行为 即将从 HTTP 请求返回的 cookie 存储在NSHTTPCookieStorage保留 cookie 直到用户关闭应用程序