跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

MAUI怎么访问iOS的Keychain MAUI iOS安全存储

.NET MAUI 通过 SecureStorage 自动调用 iOS Keychain 实现安全存储,无需手动调用 SecItemAdd;其底层使用 kSecClassGenericPassword 和指定 Service 字段写入加密字符串,需启用 keychain-access-groups 权限、匹配 Bundle ID 并真机测试。 .NET MAUI 本身不直接暴露 iOS Keychain 的底层 API,但通过
SecureStorage
(来自
Microsoft.Maui.Essentials
)自动、透明地使用 Keychain 实现安全存储——你只需调用统一接口,MAUI 在 iOS 上会自动把数据存进 Keychain,无需手动写 SecItemAdd 或处理 SecRecord。 iOS Keychain 是怎么被 MAUI 调用的 当你在 MAUI 中调用
SecureStorage.SetAsync("token", "abc123")
,在 iOS 平台运行时,Essentials 会: 构造一个
SecRecord
,其中
Service
字段设为
"{your-app-bundle-id}.microsoft.maui.essentials.preferences"
(不是旧版 Xamarin 的
.xamarinessentials
) 使用
kSecClassGenericPassword
类型,将 键值对 加密后写入系统 Keychain 所有操作由系统级安全框架保障,即使 App 沙盒被破解,Keychain 条目仍受设备密码或生物识别保护 必须满足的前提条件 确保 Keychain 正常工作,需检查以下三点: App 的
Entitlements.plist
中已启用
keychain-access-groups
(Xcode 项目设置里勾选 “Keychain Sharing”) Bundle ID 与签名配置一致(尤其调试时用自动签名容易漏掉 entitlement) 真机测试 —— iOS 模拟器 不完全支持 Keychain 安全策略,部分操作可能静默失败或弹出授权提示 能存什么?有什么限制
SecureStorage
只支持字符串类型,适合存 token、API key、用户 ID 等小段敏感文本。它不适合存: 凹凸工坊-AI手写模拟器 AI手写模拟器,一键生成手写文稿 下载 二进制数据(如加密密钥 blob)—— 需先 Base64 编码 成字符串再存 大段内容(建议不超过几 KB)—— Keychain 不是文件存储,设计目标是轻量凭证 需要自定义访问控制策略的场景(如“仅解锁屏幕后才可读”)—— MAUI 封装层不开放
kSecAttrAccessible
等细粒度选项 验证是否真的进了 Keychain(调试用) 真机连接 Mac 后,在 Xcode → Window → Devices and Simulators → 选择设备 → Installed Apps 找到你的 App → 点击齿轮图标 → “Show Container”,然后打开
Library/Keychains/
目录(需越狱或配合专用工具如
keychain_dumper
查看;普通开发者可通过日志 + 异常判断:若
SecureStorage.GetAsync
返回 null 且无异常,大概率是 entitlement 缺失或模拟器环境) 基本上就这些。用好
SecureStorage
,你就等于用上了 iOS 原生 Keychain 的全部安全性,不用碰 C# 调 Objective-C 的桥接代码。

相关文章