WWDC18 Automatic Strong Passwords and Security Code Autofill

2019 年 9 月 23 日

WWDC18 Automatic Strong Passwords and Security Code Autofill

本文将介绍WWDC18 Automatic Strong Passwords and Security Code Autofill和WWDC17 Introducing Password AutoFill for Apps中提到的几个功能:密码自动填充/自动生成的强密码/验证码自动填充等。


如果需要更好的实现此功能,网站需要支持 HTTPS,开发 Demo 可以用 GitHub Pages。在 iOS11 中,Apple 已经做了启发式功能,可以让开发者在无感知的情况下,支持密码的快速填充,但是为了更好的用户体验和降低未来版本中可能出现的 bug,建议对不同的功能做一些额外的步骤配置。默认效果是这样的,QuickType Bar 上没有关联域的账户密码可选。



默认支持的效果


功能一:iOS11 密码自动填充功能,账户密码在 QuickBar 中自动显示;iOS12 自动保存密码到 iCloud 钥匙串


Infer login scenario


Check eligibility based on asociated domains Find user name and password fields


Detect sign-in action


Prompt to save or update password


1.效果图



密码自动填充


2.工作原理


  • iOS会自动推断登录场景

  • 检查关联的域是否有效合格,从iCloud 钥匙串中筛选出符合的账户和密码显示在QuickType Bar

  • 根据设定输入框的textContentType类别,找到用户名和密码输入框,在用户点击QuickType Bar上的账户密码是填充到对应位置

  • 检测登录操作,在登录页面要从视图层次结构中移除的时候,提示是否保存/更新账户密码


3.开发人员需要配置的步骤


Associated Domains


设置 UITextField 的 textContentType 为对应类型


1)在苹果开发者后台开启 APP 的 Associated Domains 服务



苹果开发者后台 APP 配置


2)记录 Prefix 和 app 的 BundleID,生成 apple-app-site-association 文件,放到关联域网站服务器的,well-known 目录下面或者根目录下 。


注意:网站需要支持 HTTPS,Demo 中为了演示,可以把项目和个人的 Github Pages 关联,文件放到自己的 Github Pages。


{    "webcredentials":{        "apps":["XW5558TH45.com.beike.testapp"]     }}
复制代码



网站设置:文件放到关联域的服务器


官方示例存放目录:



官方示例文件存放


3.Xcode 中项目配置,开启 Domains,点击"+"添加一项,webcredentials:后面的"coderxllau.github.io"改为自己关联的域,例如 webcredentials:www.baidu.com 等



Xcode 中项目配置


4.Xcode 中除了开启并关联域,还需要更改输入框 textContentType 为指定类别。


iOS 11 和 iOS12 中分别新增了新的 Type。


UIKIT_EXTERN UITextContentType const UITextContentTypeUsername                  NS_AVAILABLE_IOS(11_0);UIKIT_EXTERN UITextContentType const UITextContentTypePassword                  NS_AVAILABLE_IOS(11_0);UIKIT_EXTERN UITextContentType const UITextContentTypeNewPassword               NS_AVAILABLE_IOS(12_0);UIKIT_EXTERN UITextContentType const UITextContentTypeOneTimeCode               NS_AVAILABLE_IOS(12_0);
复制代码


self.userNameField.textContentType = UITextContentTypeUsername;self.passwordField.textContentType = UITextContentTypePassword;
复制代码


功能二: iOS12 自动生成建议的用户和强密码


1.效果图



自动生成强密码


2.工作原理/设置步骤


和功能一 Password Autofill 基本一样,不同的地方是在 iOS 12 中新增 UITextContentTypeNewPassword,用这个字段标记新密码输入框即可在用户点击的时候自动生成强密码填充。


self.nameField.textContentType = UITextContentTypeUsername;if (@available(iOS 12.0, *)) {    self.passwordField.textContentType = UITextContentTypeNewPassword;    self.passwordField.passwordRules = [UITextInputPasswordRules passwordRulesWithDescriptor:@"required: lower; required: upper; allowe: digit; required: [-]; minlength: 5;"];
} else { self.passwordField.textContentType = UITextContentTypePassword;}
复制代码



3.密码的格式


自动生成的密码,我们可以通过一些方法指定生成的密码格式和规则。可以在官方提供的密码格式工具 Password Rules Validation Tool 上面调试自己的密码格式,将生成的密码格式描述复制下来,设置给 UITextField 的 passwordRules 属性。


if (@available(iOS 12.0, *)) {    self.passwordField.textContentType = UITextContentTypeNewPassword;    self.passwordField.passwordRules = [UITextInputPasswordRules passwordRulesWithDescriptor:@"required: lower; required: upper; allowe: digit; required: [-]; minlength: 5;"];}
复制代码



密码生成格式规则



IB 中设置密码生成格式


功能三: iOS12 自动填充验证码


1.效果图


从短信中获取到验证码后自动显示到 QuickType Bar 上。



验证码自动识别


2.工作原理


在输入框成慰第一响应者的时候,使用数据检测器启发式来推断传入消息携带安全代码,把检测到验证码显示到 QuickType Bar 上,省去用户的操作成本。


缺陷:在 demo 中可以看到,自如发来的验证码也可以被 demo 获取,对于验证码来源没有做到很好的隔离。


3.开发步骤


开发步骤和功能一基本一致,在完成功能一的基础上面,设置输入框的输入类别为 UITextContentTypeOneTimeCode 即可。


注意点


  • 您应避免在视图层次结构中构建定制键盘UI,或在控件中设置自定义输入视图。因为如果您这样做,则会阻止iOS显示必要的UI或注入相应的事件以代表您的用户键入代码。

  • 关联的网站要支持HTTPS

  • 标记textContentType的输入框独立开,不要用一个输入框标记两个类别

  • 验证码来源没有做到很好的隔离


参考资料


WWDC18 Automatic Strong Passwords and Security Code Autofill


WWDC17 Introducing Password AutoFill for Apps


作者介绍:


刘乡龙,贝壳找房 iOS 工程师,目前负责贝壳找房 APP iOS 端研发工作。


本文转载自公众号贝壳产品技术(ID:gh_9afeb423f390)。


原文链接:


https://mp.weixin.qq.com/s/rATGiSp_u2DFizodhY8JZw


2019 年 9 月 23 日 10:30144

评论

发布
暂无评论
发现更多内容

GoF 23种设计模式之单例模式

无心水

架构师 单例模式 极客大学架构师训练营 GoF 23种设计模式

架构师训练营第 0 期第三周学习总结

无名氏

【架构训练 Week03 作业】Review

Rex

游戏夜读 | 玩游戏能得到什么?

game1night

Java反射与内省(参考小米内部资料)

知春秋

Java 反射 内省

2020-06-20-第三周作业

路易斯李李李

第三周-作业

铁血杰克

架构师训练营第三周作业

Bruce Xiong

第03周 重构软件代码 命题作业

Jaye

第三周-总结

铁血杰克

架构师训练 - 第三周作业

X﹏X

设计模式

ashuai1106

设计模式 架构师 极客大学架构师训练营 23种设计模式

「架构师训练营」单例与组合模式的应用

Amy

极客大学架构师训练营 作业 第三周

第三周总结

大雄

架构师训练营第三周作业

Java 极客大学架构师训练营

第三周作业

大雄

Week3 - 总结

Coder

极客大学架构师训练营

第3周学习总结

Glowry

极客大学架构师训练营

架构师训练营 -week3- 学习总结

晓-Michelle

极客大学架构师训练营

本周学习总结

Geek_zhangjian

第三周作业一

潜默闻雨

week3-作业一

Coder

架构师训练营第三章作业

吴吴

架构师训练营第 0 期第三周作业

无名氏

单例模式 组合模式

架构师训练营 Week 03 作业

Wancho

架构师训练营week03 总结

傅晶

架构师 极客大学架构师训练营

第二周

Geek_zhangjian

第03周 重构软件代码 学习总结

Jaye

【架构训练 Week03 作业】

Rex

架构师训练营第三章总结

吴吴

架构师训练营-W03S-代码重构

BlazeLuLu

极客大学架构师训练营

WWDC18 Automatic Strong Passwords and Security Code Autofill-InfoQ