如何使用Swift中的Keychain保护用户数据

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

1.什么是Keychain?

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

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

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

2.在Swift中设置Keychain共享

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

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

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

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

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

  • pod “KeychainSwift”

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

3.Keychain Swift示例

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

钥匙串分享迅捷

第一步。将数据存储到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,如下所示

注意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类型,  如下所示:

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

持久登录swift钥匙扣ios钥匙串快速代码

4。结论

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

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

快乐的编码!

原文地址:https://www.cnblogs.com/zhanggen/p/10861231.html