WKWebView HTTP身份验证时如何将账号密码保存到加载页域名而非APP关联域名
可行实现方案
- 手动管理凭据存储,关联到目标站点的保护空间
你可以放弃依赖系统对自定义弹窗输入框的自动凭据保存逻辑,手动将用户输入的用户名密码存入系统凭据库,绑定到当前加载页面对应的域名下:- 在
webView(_:didReceive:completionHandler:)代理方法中,先获取当前认证挑战的protectionSpace对象,该对象本身就包含了目标站点的域名、端口、认证类型等信息,不需要额外构造。 - 用户在你的自定义弹窗输入完成后,先构造
URLCredential实例,调用URLCredentialStorage.shared.setCredential(_:for:)方法,将凭据和刚才获取的protectionSpace绑定,选择永久存储的话系统会将该凭据归到目标站点域名下,不会关联你App的关联域名。 - 最后调用代理方法的
completionHandler,传入构造好的凭据完成认证流程即可。
- 在
- 禁用自定义输入框的默认自动填充关联
为了避免系统主动从你的自定义输入框提取内容关联到App域名,你可以给两个输入框做如下配置:
如果需要保留自动填充功能,可以在弹窗上加一行提示,说明凭据会保存到当前访问的站点域名下,降低用户困惑。// 用户名输入框配置 usernameTextField.textContentType = .username usernameTextField.autocorrectionType = .no usernameTextField.smartInsertDeleteType = .no // 密码输入框配置 passwordTextField.textContentType = .password passwordTextField.passwordRules = nil passwordTextField.isSecureTextEntry = true - 后续验证
完成配置后你可以在iOS系统「设置-密码」中搜索目标站点域名,确认保存的凭据归属到对应站点条目下,不属于你的App关联域名的凭据列表。
内容的提问来源于stack exchange,提问作者Runt8
相关产品推荐
相关产品推荐

