热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

用于NEVPNManager的Swift中的Keychain引用

如何解决《用于NEVPNManager的Swift中的Keychain引用》经验,谁能帮忙解答一下?

我正在尝试使用Xcode中的Swift连接到VPN.我正在使用KeychainSwift来保存钥匙串参考.我的代码看起来像这样:

    private func connectVPN(completion: @escaping () -> Void) { 
        let keychain = KeychainSwift()
        keychain.set("", forKey: "passref")
        keychain.set("", forKey: "secretref")

        NEVPNManager.shared().loadFromPreferences { error in
            let vpnhost = "<11.11.11.11>"
            let username = ""

            let p = NEVPNProtocolIPSec()
            p.username = username
            p.localIdentifier = username
            p.serverAddress = vpnhost
            p.remoteIdentifier = vpnhost
            p.authenticatiOnMethod= .sharedSecret
            p.discOnnectOnSleep= false

            p.sharedSecretReference = keychain.getData("secretref")
            p.passwordReference = keychain.getData("passref")

            var rules = [NEOnDemandRule]()
            let rule = NEOnDemandRuleConnect()
            rule.interfaceTypeMatch = .any
            rules.append(rule)

            NEVPNManager.shared().localizedDescription = "My VPN"
            NEVPNManager.shared().protocolCOnfiguration= p
            NEVPNManager.shared().OnDemandRules= rules
            NEVPNManager.shared().isOnDemandEnabled= true
            NEVPNManager.shared().isEnabled = true
            NEVPNManager.shared().saveToPreferences { error in
                if (error != nil) {
                    print(error!)
                } else {
                    do {
                        try NEVPNManager.shared().connection.startVPNTunnel()
                        completion()
                    } catch {
                        print("can't connect VPN'")
                    }
                }
            }
        }
    }

我正在使用keychain.getData("secretref"),因为这个领域需要

对包含IKE共享密钥的钥匙串项的持久性钥匙串引用.

更重要的是,

持久性keychain引用必须引用类kSecClassGenericPassword的keychain项.

如果我做得对,我不太确定.我没有子类kSecClassGenericPassword或以任何方式使用它.

当我在代码中使用此功能时,一个窗口显示信息,该VPN没有共享密钥.我认为这意味着这个钥匙串不能正常运作.

在iPhone设置中,它尝试连接,将开关切换到绿色,并立即切换回"关闭"状态.当我手动输入与代码相同的数据时,连接起作用.

我究竟做错了什么?我应该纠正什么?


推荐阅读
author-avatar
云海雨岛
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有