Verifying app identity with App Check | Session - YouTube

Channel: Firebase

[0]
(欢快的音乐)
[5]
-大家好
[6]
我是Tyler 目前在Firebase担任产品经理
[9]
我主要负责安全和开发者工具方面的工作 今天和我一起的是Rosalyn
[13]
-大家好,我是Rosalyn 目前在Firebase担任工程师
[17]
我主要从事最终用户和开发者安全方面的工作
[20]
-众所周知,确保安全是一项艰巨的任务
[23]
当下,随着更多的威胁被发现
[25]
保护用户及其数据 并保证用户可以访问您的资源
[30]
变得日益重要
[32]
目前,您可以将Firebase身份验证 与Firebase安全规则结合使用
[38]
以保护用户及其数据
[41]
Firebase身份验证
[44]
支持您确定应用的用户与其自称的身份相符
[48]
而Firebase安全规则 则支持您根据试图访问数据的用户
[52]
来授予数据访问权限
[55]
但对您资源的访问又如何呢?
[58]
确保只有受信任的应用
[62]
能够使用您的后端资源也十分重要
[64]
这就是我们想要推出 Firebase App Check的原因
[67]
这个新的平台可提高应用和资源的安全性
[71]
-我们一起更深入地了解一下Firebase App Check如何提供帮助
[76]
这是Taylor 她是一位Android开发者
[79]
Taylor正在打造一款 可供用户上传和存储媒体内容的应用
[84]
在开发过程中,Taylor一直将安全牢记于心
[86]
为了确保用户只能访问自己的内容
[89]
或好友与之分享的内容
[92]
Taylor将后端与 Firebase身份验证集成在一起
[96]
她的应用在Play Store中一经发布 便取得了稳定的增长和使用
[100]
非常成功的一款应用!
[102]
有一天,Taylor注意到后端流量出现激增
[106]
这似乎不符合使用模式
[109]
经过调查,Taylor发现
[110]
这些流量似乎并不是来自于她的应用
[114]
有人盗取了她的应用凭据 并使用这些凭据直接访问她的后端
[120]
-真是糟糕,Roslyn
[121]
这似乎是开发者最大的噩梦
[124]
Taylor要怎么做?
[125]
-Taylor在这种情况下可以采取一些行动
[130]
一个例子是轮换安全凭证
[134]
这样攻击者便无法再访问她的后端
[137]
她也可以尝试为API密钥添加限制
[141]
但是,这两种方法都存在局限性
[145]
对于Taylor而言,更好的解决方案是
[148]
拒绝来自其Android应用的未经验证的流量
[152]
-这似乎是一个完美的用例
[156]
Taylor可以使用App Check
[160]
轻松为她的应用直接添加这种保护
[162]
-有一点非常棒,那就是Taylor 使用简单的解决方案即可保护服务器安全
[166]
但App Check到底是什么? 工作原理又是怎样?
[170]
-Rosalyn,问得好
[172]
App Check是一个新的平台
[174]
可以验证流量是否来自您的应用 从而保护服务访问安全
[179]
App Check通过执行 以下两个关键操作来实现这种安全性
[182]
应用证明和控制资源访问
[187]
应用证明是指通过证明提供程序
[190]
验证设备中实际运行的应用
[193]
是否为您的应用的过程
[195]
证明提供程序可以证明该应用是否确实是您的应用
[200]
通过确保流量包含来自
[202]
App Check的凭据来控制资源访问
[206]
从而证明该请求来自您的应用
[209]
我们来了解一下这些流程如何保护您的资源
[212]
在全球范围内,在用户设备中运行的应用启动
[217]
应用会与您配置的证明提供程序联系
[219]
以证明启动的应用为您的应用
[223]
经过证明后
[226]
应用会用该证明 来交换一个App Check令牌
[228]
在应用访问资源(如数据库)时
[232]
应用现在便会 与请求一起传递App Check令牌
[236]
App Check令牌 由App Check服务进行验证
[240]
并支持访问您的资源
[243]
现在我们已了解这些流程
[245]
那么App Check支持哪些证明提供程序?
[249]
在Android中 App Check已与SafetyNet集成
[252]
应用调用SafetyNet时
[254]
该平台会提供一个加密签名的证明
[258]
以评估设备完整性 SafetyNet可用于帮助确定
[262]
您的服务是否与运行在
[266]
真实Android设备上的真实应用进行交互
[270]
对于Web 您可以使用reCAPTCHA
[273]
来帮助证明请求来自托管域
[276]
而不是来自机器人
[279]
在iOS中,App Check已与App Attest和Device Check集成
[284]
App Attest为您的应用提供了一种方法
[289]
来断言发送到您服务的请求来自应用的合法实例
[291]
敬请留意,因为这些内容很快便会推出
[296]
我们还提供自定义的证明集成
[299]
可供您集成自己的应用证明提供程序
[302]
如果您想涵盖其他平台(如IOT或桌面) 此功能可提供帮助
[308]
现在我们已了解提供程序,下面我们看一下示例
[312]
您编写了一款使用Cloud Storage for Firebase的Android应用
[316]
通常情况下,您的应用会连接到存储空间
[318]
并访问必要的数据,从而为用户提供服务
[322]
但是如何知道只有您的应用在访问存储空间呢?
[326]
您已在App Check注册了您的应用 并执行了存储空间保护
[331]
App Check过程 从SafetyNet证明您的应用开始
[336]
您的应用通过SafetyNet安全验证后 便会收到一个证明工件
[342]
然后用它来交换一个App Check令牌
[345]
可供您的应用来访问存储空间
[348]
应用发送请求时 存储空间API会验证是否存在
[352]
可信的App Check令牌
[355]
由于您设置了强制执行模式
[357]
所有发送至API的请求 都需要提供App Check令牌
[361]
您甚至可以在控制台中 找到相关指标,用于监控流向端点的流量
[366]
这样您便可以看到接受和被拒绝的流量
[370]
从而轻松知道是否 所有的客户端流量都来自您的应用
[373]
-Tyler,感谢您的详细讲解 但您是如何设置App Check的呢?
[378]
我们来看看在Android应用中 将Firebase App Check与
[382]
Cloud Storage for Firebase结合使用的示例
[385]
配置Firebase App Check时 有下列两个主要步骤
[389]
应用注册和强制执行
[391]
应用注册包括注册应用
[394]
和安装客户端SDK
[396]
在Firebase控制台中 您利用所选的证明提供程序
[399]
在App Check中注册您的应用
[402]
在您将客户端SDK集成到应用代码中后
[405]
您的应用将开始 获取App Check令牌和请求
[409]
并将其发送到Firebase服务
[411]
即使App Check令牌缺失或无效
[414]
请求仍会传递至服务
[416]
但您会开始在 App Check设置页面中看到对应指标
[419]
这些指标可以告知 您是否对产品强制执行App Check的决策
[423]
为Firebase产品 启用App Check强制执行功能意味着
[427]
没有附加有效App Check令牌的请求
[431]
会遭到拒绝
[432]
启用App Check强制执行功能后
[434]
您将拥有对该产品 完全启用的App Check保护
[438]
现在我们来看看 如何在Firebase控制台中
[441]
注册应用以使用App Check
[443]
您可以在项目设置下 找到新的App Check设置标签页
[448]
在此处的概览面板中
[450]
您可以看到您在Firebase 项目中拥有的所有应用
[454]
及其App Check注册状态
[456]
为了注册应用以使用App Check
[460]
您需要输入一些信息 以便为每个平台正确配置证明提供程序
[465]
对于Android 您需要输入SHA256证书
[469]
并在云控制台中
[472]
启用Android设备验证API
[474]
对于iOS和Web 您需要配置设备检查或reCAPTCHA
[478]
在Firebase控制台中完成应用配置后
[481]
便可将App Check集成到应用代码中
[485]
所有三个平台上的客户端设置都非常简单
[488]
对于Android,只需提供 一个Firebase App Check实例
[491]
并安装一个SafetyNet App Check提供程序工厂
[495]
对于Web,您需要提供一个App Check 实例,然后调用activate,以利用
[499]
reCAPTCHA网站密钥对其进行配置
[501]
对于iOS,如果您使用设备检查
[503]
您只需要提供 Firebase App Check SDK
[506]
并确保所有内容均已自动配置
[509]
现在我们一起了解Android Studio
[511]
并将前面显示的代码添加到Android应用中
[515]
我们现在一起来构建应用,然后尝试提出请求
[519]
很好 虽然没有什么明显的变化
[522]
但App Check令牌 现在已包含在我的存储请求中
[526]
完成客户端集成后
[529]
您即可在Firebase 控制台中监控App Check流量
[532]
我们来看一下之前已配置 App Check的Firebase项目
[536]
在图中,您可以看到
[539]
传入您的项目云存储空间 且经过验证的流量所占百分比
[542]
可能来自过时客户端的流量所占百分比
[545]
来自未知来源流量所占百分比 以及恶意流量所占百分比的对比情况
[551]
在针对产品启用强制执行功能前 需要仔细考虑这些指标
[556]
我们一起来深入了解每个类别
[559]
经过验证的请求是指 已附加有效App Check令牌的请求
[563]
这些请求经过证明来自受信任的应用
[568]
强制执行功能启用后
[570]
只有这些请求将获准通过
[574]
接下来是未经验证、可能过时的请求
[579]
这些请求可能来自您的应用
[582]
但它们是来自未进行 App Check客户端集成的旧版应用
[587]
这些请求并未附加App Check令牌
[590]
但根据其他信号 我们确定上述情况是很可能的
[593]
因为请求是来自旧的客户端
[597]
-在我的项目中 似乎40%的请求都属于这个类别
[602]
这可能意味着我不需要启用强制执行功能,是吗?
[605]
-可能还不需要
[607]
当然, 最终决定权在您手里
[610]
但如果现在启用强制执行功能 便意味着几乎一半的用户
[613]
会遭遇不完整的应用体验 -原来如此
[617]
那我应该鼓励用户升级至最新版的应用
[621]
这样,更多的请求便可以在 启用强制执行功能前显示为已验证
[625]
-没错
[627]
下一个类别的请求是未经验证、来源未知的请求
[632]
这些请求未附加任何App Check令牌
[635]
我们也无法对这些流量的来源进行有根据的猜测
[639]
这些流量很可能并不是来自您的应用
[645]
最后一个类别是未经验证的恶意请求
[649]
这些请求附加了无效的App Check令牌
[652]
这意味着请求也可能来自受信任的应用之外
[656]
-啊!
[657]
如果后两种类别的请求所占比例较大
[661]
那么启用App Check强制执行 可能有助于阻止这种流量
[664]
-没错
[665]
如果您对显示为已验证的流量所占百分比感到满意
[669]
则可以对产品启用强制执行功能 不过,要当心点
[672]
提醒一下,启用强制执行功能后
[675]
所有不属于已验证类别的流量都会遭拒
[679]
在针对产品执行App Check前
[682]
您需要确保有足够多的请求 不属于可能已过时的类别
[684]
以避免影响用户体验
[689]
现在我们来了解一下Android应用的项目
[692]
并针对存储空间启用强制执行功能
[696]
既然我们已强制执行App Check
[698]
我们来尝试一下从命令行发送请求
[701]
如您所见,这个请求现在已被拒绝
[705]
但是,如果我从真实的设备发出这个请求
[707]
便会成功通过
[709]
-这太棒了
[711]
如果我开发一款新的应用,情况会是如何呢?
[713]
我应该何时强制执行App Check?
[715]
-由于新应用不会有任何过时的客户端
[718]
我们建议您在开发之初便强制执行
[721]
-这样一来,有了最初的保护 我就永远不用担心迁移的问题
[726]
但是如果我想使用模拟器进行开发呢?
[729]
-问得好
[730]
例如,在Android中 模拟器无法通过SafetyNet证明
[735]
如此一来,对于已强制执行App Check 的情形,便无法利用模拟器顺利进行开发
[739]
这就是为什么我们还为所有三种平台
[742]
提供了一个调试App Check提供程序
[744]
以便在模拟环境中使用
[748]
调试App Check提供程序 不会去证明应用的完整性
[751]
而是将一个能够在Firebase控制台中
[754]
配置的调试密钥用于交换App Check令牌
[759]
-看到App Check能够发挥作用太好了
[761]
我们希望您今天便能开始集成您的应用
[764]
App Check不仅适用于 Android、iOS和Web应用
[768]
而且还能与Cloud Storage for Firebase
[771]
实时数据库和Firebase的云功能集成
[774]
更多的应用证明提供程序和 产品集成功能也在积极开发中
[779]
不妨将您现有的应用迁移到App Check
[781]
如果您计划将应用发布到生产环境中
[784]
请尽早与App Check集成
[787]
这将为您省去今后迁移旧客户端的麻烦
[791]
请查看我们Firebase文档中的指南 尽享愉快的开发体验
[794]
(欢快的音乐)