iOS Keychain和keychain share

一、keychain介绍(摘抄别人的https://blog.hudongdong.com/ios/356.html

根据苹果的介绍,iOS设备中的Keychain是一个安全的存储容器,可以用来为不同应用保存敏感信息比如用户名,密码,网络密码,认证令牌。苹果自己用keychain来保存Wi-Fi网络密码,VPN凭证等等。它是一个sqlite数据库,位于/private/var/Keychains/keychain-2.db,其保存的所有数据都是加密过的。

开发者通常会希望能够利用操作系统提供的功能来保存凭证(credentials)而不是把它们(凭证)保存到NSUserDefaults,plist文件等地方。保存这些数据的原因是开发者不想用户每次都要登录,因此会把认证信息保存到设备上的某个地方并且在用户再次打开应用的时候用这些数据自动登录。Keychain的信息是存在于每个应用(app)的沙盒之外的。

这个数据是存在系统的,所以就算卸载软件,也照样存在机器中,除非恢复系统。

所以他本质上是一个数据库,所以他可以给单个app 使用, 也可以多个app 共享一组数据。当然这是同一开发者下的多个app,不同开发者之间还是隔离的。 

二、使用

a、keychain 

每个app安装以后,都会生成一个默认的 accessgroup ,格式为{teamId}.{bundleId}.不用多做任何操作,直接使用SAMKeychain 其他第三方库调用存储或获取。不用去设置accessgroup,默认就app自己私有accessgroup。好了到这里完全没有问题。

b、keychain share

现在的问题是我的多app 怎么使用keychainshare,它的存在就是为了在多个 app之间共享一些数据。

比如现在有A、B、C 三个app,他们默认的私有accessgroup,{teamId}.{bundleIdA},{teamId}.{bundleIdB},{teamId}.{bundleIdC}。说他们 私有是相对的,因为即使是它们的私有accessgroup,也是可以被其他两个app 访问的, 只要,三个app都在keychaingroups都设置了{teamId}.{bundleIdA} 这个accessgroup,那么三个app都是都是访问这个accessgroup的内容的。

比如三个app的设置如上图,那appA 能访问{teamId}.{bundleIdA}。appB,AppC能除了能访问自己的私有accessgroup 之外,还能访问{teamId}.{bundleIdA}。所以accessgroup没有私有只说,只要把他设置在了keychaingroups,其他app也就取得了这个accessgroup 的访问权限。当然accessgroup也可以设置一个完全跟appId无关的共享的accessgroup,比如{teamId}.xxxx shared等等。

到这就完了吗,当然不是。

使用SAMKeychain 存取的方法,是不带 accessgroup 的,所以有的人就忽略了这点,拿到的值是app默认的accessgroup 中的。它是怎么个默认法的, 简单就是刚装上的时候是,默认的私有accessgroup:teamId}.{bundleId},然后你一旦使用了其他accessgroup,以后这个accessgroup就是默认的accessgroup(在不设置accessgroup)情况啊下存取。 

所以在使用keychai-share的时候,accessgroup一定要带上, 不然你都不知道你是从哪个accessgroup 中取的值。

SAMKeychain 对keychai-share 使用就不友好, 所以把它修改了一下, 有需要的取。

https://download.csdn.net/download/qqylgd/21549783

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值