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

八、认证

八、认证安卓棉花糖引入了一个新集成的应用编程接口,以更好地支持用户身份验证和用户验证。我们现在可

八、认证

安卓棉花糖引入了一个新集成的应用编程接口,以更好地支持用户身份验证和用户验证。我们现在可以对带有指纹扫描仪的设备使用新的Fingerprint应用编程接口来验证用户。我们还可以为用户锁定屏幕验证设置一个特定的时间,以便在应用登录时被视为有效。在本章中,我们将尝试浏览这些新增内容,并解释如何使用它们:


  • Fingerprint认证应用编程接口

  • 凭据的宽限期

  • Cleartext网络流量


指纹认证 API

安卓棉花糖现在允许我们开发人员在支持的设备上使用这种身份验证扫描仪时,通过指纹扫描对用户进行身份验证。

Fingerprint应用编程接口通过一个全新的包被添加到安卓棉花糖中:

android.hardware.fingerprint

该包包含四个类:


  • FingerprintManager

  • FingerprintManager.AuthenticationCallback

  • FingerprintManager.AuthenticationResult

  • FingerprintManager.CryptoObject

每个类在我们的指纹认证过程中都有特定的角色。

我们如何使用指纹认证?

android.hardware.fingerprint包的前四类可以用以下方式解释:


  • FingerprintManager:管理对指纹硬件的访问

  • FingerprintManager.AuthenticationCallback:在auth过程中使用的回调

  • FingerprintManager.AuthenticationResult:结果容器用于auth过程

  • FingerprintManager.CryptoObject:具体 Crypto对象配合FingerprintManager使用

比方说,我们想通过用户的指纹来验证他们的身份。必须使用带有指纹传感器的设备;否则,我们不能使用这个 API。我们需要得到一个FingerprintManager的实例,然后我们称为authenticate()方法。我们必须为指纹认证流程实现一个特定的用户界面,并且标准的安卓指纹图标(c_fp_40px.png)包含在源代码中。我们需要将适当的权限添加到我们的应用清单中:

<uses-permission android:name="android.permission.USE_FINGERPRINT" />

现在,我们没有带指纹传感器的设备,所以我们需要从模拟器中测试我们的代码。(Nexus 5X 和 Nexus 6P 仍供应有限)

设置测试

安卓 SDK 工具修订版 24.3 (至少)必须安装。现在,我们导航到设置 | 安全 | 指纹并添加一个指纹。

Setting up for testing

手动遵循说明;我们被要求选择个人识别码,并引导我们找到以下截图:

Setting up for testing

最后,我们必须使用一个特殊的adb命令,让传感器捕捉模拟指纹:

adb -e emu finger touch <finger_id>

结果屏幕应该如下图所示:

Setting up for testing

我们用finger_id =1表示单个手指。同样的命令也在锁屏或我们的应用中模拟指纹触摸事件。

Setting up for testing

如果需要帮助来设置模拟器,请阅读:

https://developer.android.com/tools/devices/index.html

现在,我们可以启动我们的应用,看到当用户购买物品时,我们可以使用指纹作为我们的身份验证方法。

凭证的宽限期

有没有在设备解锁后想使用某个 app 却发现需要重新登录或者再次输入 app 密码的心痒痒?好了,现在我们可以查询该设备,并检查它最近是否解锁以及最近有多长时间。这将使我们的用户有机会避免使用我们的应用带来的所有麻烦。请注意,这必须与用户身份验证的公钥或私钥实现结合使用。如果您想了解更多关于安卓密钥库系统的信息,请访问https://developer . Android . com/training/articles/Keystore . html。

我们使用KeyguardManager并通过isKeyguardSecure()方法检查我们的锁屏是否安全。一旦我们知道它是安全的,我们可以尝试使用该功能;否则,这意味着用户没有设置安全的锁屏,这个功能是无操作

我们在 Android KeyStore 中用KeyGenerator生成一个对称密钥,只有在用户在最后 x 秒内用设备凭证认证后才能使用。设置该值( x )通过setUserAuthenticationValidityDurationSeconds()方法完成,此时我们设置KeyGeneratorKeyPairGenerator

Credentials' Grace Period

更多信息可以查看示例代码。活动名为CredGraceActivity

尽量少显示重新验证对话框。当使用加密对象时,您应该尝试验证它的到期时间,并且只有当它通过时,才使用createConfirmDeviceCredentialIntent()来重新验证用户。

明文网络流量

安卓棉花糖也在清单中增加了一个新的标志。该标志指示应用是否正在使用cleartext网络流量,如 HTTP。标志为android:usesCleartextTraffic,默认值为true。将此设置为false意味着一些系统 API 组件——如 HTTP 和 FTP 栈、DownloadManagerMediaPlayer——将拒绝发出 HTTP 流量,并且只允许 HTTPS。这将是一个很好的实践,建立一个第三方库,也尊重这一设置。为什么这样好?嗯,cleartext流量缺乏保密性、真实性和防篡改保护,数据可以在不被检测到的情况下被篡改。这是应用面临的一个主要风险,我们现在可以利用它来尝试和实施更强大、更安全的应用数据传输。

我们需要记住,这个标志是在尽最大努力的基础上授予的,并且不可能阻止来自安卓应用的所有cleartext流量,因为它们有权限使用Socket应用编程接口,例如,Socket应用编程接口不能确定cleartext的使用。我们可以通过阅读ApplicationInfo.flagsNetworkSecurityPolicy.isCleartextTrafficPermitted()来查看这个标志。

WebView 不尊重此标志,这意味着即使标志为false,它也会加载 HTTP。

那么,我们如何处理明文网络流量标志呢?

在应用开发过程中,我们可以使用StrictMode并使用StrictMode.VmPolicy.Builder.detectCleartextNetwork()识别来自我们应用的任何cleartext流量。

usesCleartextTraffic的缺点是在不使用 SSL (简称 【安全套接字层】时导致应用崩溃或进程终止。这在理论上很好,但在生产中却不行,在生产中,由于某种原因,您的 SSL 证书有问题,您需要将流量重新路由到 HTTP。因此,要格外注意 HTTPS 在你的应用中的使用位置,以及在哪里可以使用 HTTP。

幸运的是,我们有StrictMode,如果你的应用通过StrictMode.VmPolicy.Builder上的detectCleartextNetwork()方法执行任何未加密的网络操作,它现在有办法警告你。在我们的示例项目中,我们有一个ClearTextNetworkUsageActivity活动;运行TestStrictHttp productFlavor变型时,您将在LogCat中看到。

So, what do we do with the cleartext network traffic flag?

总结

安卓棉花糖给了我们一个新的应用编程接口,用Fingerprint应用编程接口认证用户。我们可以使用传感器,甚至在我们的应用中对用户进行身份验证,如果我们想使用安卓棉花糖引入的凭据宽限期功能来节省用户登录的需求,我们可以保存它以备后用。

我们还介绍了一种仅使用 HTTPS 使我们的应用更加安全的方法,以及借助usesCleartextTraffic标志实施的StrictMode策略,该策略允许我们确保连接到外部世界的所有节点都是安全连接,并检查是否需要安全连接。

我想感谢你的阅读。

感谢安卓团队。这个产品改变了我的生活。

安卓生态系统有优秀的开发者通过发布库、写博客和回答支持问题做出贡献;我很自豪能成为其中的一员。

期待未来的版本。


推荐阅读
  • 本文比较了eBPF和WebAssembly作为云原生VM的特点和应用领域。eBPF作为运行在Linux内核中的轻量级代码执行沙箱,适用于网络或安全相关的任务;而WebAssembly作为图灵完备的语言,在商业应用中具有优势。同时,介绍了WebAssembly在Linux内核中运行的尝试以及基于LLVM的云原生WebAssembly编译器WasmEdge Runtime的案例,展示了WebAssembly作为原生应用程序的潜力。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了绕过WAF的XSS检测机制的方法,包括确定payload结构、测试和混淆。同时提出了一种构建XSS payload的方法,该payload与安全机制使用的正则表达式不匹配。通过清理用户输入、转义输出、使用文档对象模型(DOM)接收器和源、实施适当的跨域资源共享(CORS)策略和其他安全策略,可以有效阻止XSS漏洞。但是,WAF或自定义过滤器仍然被广泛使用来增加安全性。本文的方法可以绕过这种安全机制,构建与正则表达式不匹配的XSS payload。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了logistic回归(线性和非线性)相关的知识,包括线性logistic回归的代码和数据集的分布情况。希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
author-avatar
手机用户2502917981
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有