获取Android应用的有效facetID,以便与com.google.android.gms.fido.u2f.api一起使用

时间:2018-03-29 12:59:33

标签: android fido-u2f

我对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编码的哈希,它会期望什么格式(以及如何生成它)?

2 个答案:

答案 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'