我对Android FIDO U2F API中的appID有两个问题。
是否可以直接使用标识我的应用的facetID,或者它是否需要是指向包含有效facetID的JSON的HTTPS URL?我怀疑可能无法直接将facetID用作appID(尽管官方的FIDO规范应该允许)。
我的另一个问题是关于识别我的应用的facetID。 official FIDO specification定义了Android应用的facetID,如下所示:
在Android [ANDROID]的情况下,FacetID必须是从APK签名证书[APK-Signing]的Base64编码SHA-1哈希派生的URI:
android:apk-key-hash:<base64_encoded_sha1_hash-of-apk-signing-cert>
当我查看Google Samples中的工作example时,使用过的facetID似乎包含其他内容。
有问题的facetID(绝对不是base64):
android:apk-key-hash:bkHnlWEV_jRCPdYGJfwOl7Sn_CLC_2TE3h4TO1_n34I
以下是包含相关facetID的JSON。
如果API不期望使用base64编码的哈希,它会期望什么格式(以及如何生成它)?
答案 0 :(得分:0)
解决方案:
由于某些原因,Google未遵循FIDO U2F规范。计算apk签名证书的SHA-256(不是每个FIDO规范的SHA-1),然后计算base64。然后删除最后的=字符。
答案 1 :(得分:0)
正如已经指出的那样:Google使用SHA256哈希。
从密钥库中获取签名密钥的编码版本。
keytool -list -v -keystore <your.keystore> | grep "SHA256: " | cut -d " " -f 3 | xxd -r -p | openssl base64 | sed 's/=//g'