如何使用Swift中的Keychain?;び没?/h1>

在当今以隐私为中心的世界中,通过安全地存储关键用户数据来保持我们iOS应用程序安全性的高标准比以往任何时候都更加重要。在iOS应用中处理敏感用户数据(如密码,应用内购买等)时,移动开发人员需要考虑安全性。我非常重视安全性,将其作为我们核心价值观的一部分。在本教程中,我将向您展示如何通过在iOS上实现持久登录功能来使用Swift中的Keychain来存储敏感用户数据。

image

1.什么是Keychain?

Keychain是存储小型敏感数据,如密码,银行帐号或我们希望为您的用户保密的一些其他个人信息。
与OS X一样,iOS也为您的应用程序提供了一个Keychain,以便能够存储所有上述敏感数据类型。通常,我们只能在同一个应用程序中使用这些类型的信息,而不能在其他应用程序中使用。

那么,你有没有听说过Facebook和Messenger?开玩笑。两个应用程序最酷的事情是,一旦您成功登录Facebook注册帐户,您也可以使用相同的帐户登录到Messenger。但您可能想知道我们是否可以这样做,这意味着帐户信息不安全。应用程序必须知道用户的电子邮件和密码才能登录Messenger - 聊天应用程序。

实际上,我们可以使用Keychain Sharing来确保安全性。我们可以在具有相同Apple开发者帐户的同一设备上的许多不同应用程序之间共享存储的Keychain。

2.在Swift中设置Keychain共享

在这个Swift教程中,我们需要创建两个不同的移动应用程序,向您展示如何使用Keychain Sharing及其强大的功能。让我们将这两个应用 命名为TheiOSAppTemplatesTheiOSAppTemplatesBlog 项目**

在每个项目中,我们在Capabilities窗格中打开Keychain Sharing,如下图所示。记住Keychain Groups的价值, 因为它用于其他应用程序?;诖?,他们可以从Keychain中检索存储的值。

image

打开后,Keychain Sharing将为您创建一个*“.entitlements” *文件:

image

在上面的文件中,有一个{ AppIdentifierPrefix }字段。此字段是从Apple Developer Account门户中的App ID获取的Prefix(或TeamID)。

image
image

目前,有许多支持Keychain Storage的开源Swift库。我们也可以自己编码,因为它并不难。但是为了简单和快速,我们将使用KeychainSwift库,我们将其作为Cocoa Pods项目的依赖项添加到:

*   pod “KeychainSwift”

在完成的源代码中,我们实际安装了该pod库,因此 您需要 做的就是 下载并运行Xcode项目。

3.****Keychain ****Swift示例

在我们开始之前,让我们稍微描述一下这两个应用程序。第一个名为TheiOSAppTemplates的应用程序 具有用户名密码的登录功能。成功登录后,它将引导您进入只有一个按钮的屏幕。点击该按钮将打开第二个应用程序(TheiOSAppTemplatesBlog),其中包含来自第一个应用程序的信息(用户名和密码)。

Keychain swift
第一步。将数据存储到Swift中的Keychain(写入Keychain)

好吧,让我们编写代码。在“ 登录 ”按钮的IBAction中,我们可以这样:

guard let userName = self.userNameTextField.text,
      let password = self.passwordTextField.text else { return }

let keychain = KeychainSwift()
keychain.accessGroup = "123ABCXYZ.iOSAppTemplates"
keychain.set(userName, forKey: "userName")
keychain.set(password, forKey: "password")

// The next flow is navigation. Basically, it pushes to ReadBlogsViewController

上面的代码取到了userNameTextFieldpasswordTextField的值,然后将它们存储到Keychain中。通过将app设置为accessGroup,我们启用了在两个应用程序之间共享密钥链数据的功能。

显然,不要忘记导入KeychainSwift库,以便代码成功编译。如您所见,只需几行简单的代码,就可以将必要的信息保存到Keychain中。下一步是导航到 *ReadBlogsViewController *。我们把这部分留给你作为一个小挑战。

接下来,让我们看看 ReadBlogsViewController类中的内容。在“ Read our blogs ”按钮的IBAction中,我们有:

guard let appURL = URL(string:“OpenBlogApp://”)else if {return} if UIApplication.shared.canOpenURL(appURL){ 
    UIApplication.shared.open(appURL) }

上面的代码帮助我们从另一个应用程序打开一个应用程序。但是,这还不够。我们需要稍微配置一下Schemes。让我们将LSApplicationQueriesSchemes参数添加到Info.plist,如下所示

image

注意LSApplicationQueriesSchemes的类型 。它应该是Array类型而不是String

然后 从Swift中的Keychain读取数据

让我们看看我们如何从其他应用程序中的Keychain中检索信息。在viewDidLoad中,我们有以下代码从Keychain读?。?*

let keychain = KeychainSwift() keychain.accessGroup =“123ABCXYZ.iOSAppTemplates” 
    if let userName = keychain.get(“userName”), let password = keychain.get(“password”){ keychainLabel.text =“userName = \(userName )password = \(密码)“ 
    }

简单直接。请注意我们如何设置accessGroup,类似于我们为第一个应用程序所做的。通过这种方式,我们可以获得存储在Keychain中的值,即使数据是由其他应用程序编写的。

这个Keychain Swift教程的最后一步是在Info.plist中配置URL类型, 如下所示:

image

这将允许从第一个应用程序打开第二个应用程序。让我们同时运行两个iOS应用程序,并查看结果。点击按钮,输入流程,并通过利用Keychain,注意如何在同一访问组中的两个不同应用之间安全地共享数据。

登录swift
Keychain ios
Keychain swift代码

4。结论

正如我们所看到的,Keychain是一种强大的数据存储机制,支持不同iOS应用之间的安全数据共享。我们希望在阅读本文之后,您现在可以通过Swift中的Keychain以安全的方式存储敏感用户信息以及保留登录凭据。

这是一个非常有用的功能,如果将来您计划开发多个相互关联的应用程序并在本地之间共享数据。在阅读开源Swift项目之前,我们建议您尝试根据我们的教程编写自己的代码。

快乐的编码!

最后编辑于
?著作权归作者所有,转载或内容合作请联系作者

  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,100评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,308评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事?!?“怎么了?”我有些...
    开封第一讲书人阅读 159,718评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,275评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,376评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,454评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,464评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,248评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,686评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,974评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,150评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,817评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,484评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,140评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,374评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,012评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,041评论 2 351