如何从Firebase AppCheck获取完整性判定?Play Integrity设置疑问
1. 为啥Firebase AppCheck Token里不带Play Integrity的原始判定结果?
Firebase AppCheck本来就是为了简化后端验证做的封装——它把Play Integrity那堆复杂的设备/应用完整性判定,直接转换成了一个只用来判断"请求是否合法"的标准化Token,不会把MEETS_DEVICE_INTEGRITY这类具体判定塞进Token里。
要是你自定义后端必须要这些原始判定,别用Firebase的兑换接口了,得自己搞:
- 客户端调完Play Integrity的
requestIntegrityToken后,把完整的判定结果(verdicts)和原始的Play Integrity Token一起存下来; - 客户端把这俩内容都传给你的后端;
- 后端直接调用Google Play Integrity的验证API校验Token,同时拿到原始判定结果自行处理。
2. Google Play Console里的MEETS_DEVICE_INTEGRITY为啥删不掉?
这是个强制项,是Firebase用Play Integrity作为验证提供者的最低门槛。Google不让你取消,就是为了保证所有过了AppCheck的请求,至少能通过最基础的设备完整性校验,防住那些最入门的篡改、模拟器作弊之类的操作。
3. Firebase AppCheck是怎么处理Play Console里的完整性设置的?
Firebase AppCheck完全跟着你在Play Console里勾选的选项走,但要注意完整性级别是递进的:MEETS_STRONG_INTEGRITY是最高级,包含DEVICE和BASIC的所有要求;MEETS_DEVICE_INTEGRITY次之,包含BASIC;MEETS_BASIC是最低级。
当你勾选多个选项时,相当于放宽了通过条件——只要Play Integrity返回的结果满足你勾选的任意一个级别,AppCheck就认它有效。比如你勾了三个选项,那只要过了最低的BASIC就能拿到Token;要是只勾STRONG,那就必须满足最高级的强完整性才行。
4. 要是控制台勾了三个选项,但Play Integrity只返回MEETS_DEVICE_INTEGRITY,AppCheck会给有效Token吗?
肯定会。你勾了三个选项,意味着只要满足其中任何一个就合格。MEETS_DEVICE_INTEGRITY在你勾选的列表里,所以AppCheck会判定这个请求合法,正常返回验证通过的Token。
内容的提问来源于stack exchange,提问作者piotrpawlowski

