• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

c# - 跨应用钥匙串(keychain)访问,在哪里配置?

[复制链接]
菜鸟教程小白 发表于 2022-12-11 22:41:47 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我目前正在开发多个跨平台应用程序,这些应用程序(在 iOS 下)使用一些共享的钥匙串(keychain)条目。我目前的项目是在 android 上开始的,在我们有了一个工作版本之后,我继续在 iOS 版本上工作。我从早期项目中导入了我们的钥匙串(keychain)访问代码来访问我们共享的登录数据。只有这一次查询总是返回 SecStatusCode.ItemNotFound。

我比较了配置文件和权利,看起来都一样。过了一段时间,它让我发疯了,我创建了一个新的空应用程序,其中只有钥匙串(keychain)代码、相同的包标识符、配置文件和权利文件作为当前不工作的应用程序,它工作得很好并返回我的数据。

我的问题是,除了 entitlements.plist 和配置文件之外,还有什么地方需要配置,可能会干扰我对钥匙串(keychain)条目的访问?由于项目有点大,我不想将所有代码复制到新项目中。我尝试了适用于 Windows 的 Visual Studio 2017 和适用于 Mac 2019 的 VS。它是一个内部/企业应用程序,这是值得关注的......

钥匙串(keychain)调用:

KeyChain kc = new KeyChain("USER_DATA", "de.rlp.myCompany.Shared");
var data = kc.Find("LOGIN_DATA");

钥匙串(keychain)类:

public class KeyChain
{
    public string ServiceName { get; set; }
    public string GroupName { get; set; }

    public KeyChain(string serviceName, string groupName = null)
    {
        ServiceName = serviceName;
        GroupName = groupName;
    }

    public byte[] Find(string key)
    {
        SecStatusCode res;
        var rec = PrepareDictionary(key);
        var match = SecKeyChain.QueryAsRecord(rec, out res);
        if (res == SecStatusCode.Success) // ItemNotFound return-code here
        {
            return match.ValueData.ToArray();
        }
        else
        {
            System.Diagnostics.Debug.Write(res.ToString()); 
        }
        return null;
    }

    private SecRecord PrepareDictionary(string key)
    {
        var sr = new SecRecord(SecKind.GenericPassword)
        {
            Service = this.ServiceName,
            Generic = NSData.FromString (key),
            Account = key,
            Accessible = SecAccessible.AlwaysThisDeviceOnly
        };
        if (string.IsNullOrEmpty(GroupName))
        {
            sr.AccessGroup = GroupName;
        }
        return sr;
    }

}

权利-条目

<key>keychain-access-groups</key>
<array>
    <string>$(AppIdentifierPrefix)de.rlp.myCompany.Shared</string>
</array>



Best Answer-推荐答案


您是否已将两个应用程序从权利添加到同一个应用程序组/钥匙串(keychain)组并启用它。

VS 可能有问题。只需在苹果开发者网站上检查这两个应用程序的权利。 这可能是问题所在。

Documentation

关于c# - 跨应用钥匙串(keychain)访问,在哪里配置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55628479/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap