FIDO2 API 在 Android 端使用,帮助开发者实现无密码登录机制

Android 平台从 Android 7.0(API 级别 24)开始支持 FIDO2 API,并且与 WebAuthn API 兼容。用户可以通过指纹、PIN 或外部安全设备进行身份验证。

如何在 Android 上接入 FIDO2 API

要在 Android 应用中使用 FIDO2 API,你需要遵循以下步骤:

  1. 添加依赖项
    build.gradle 文件中添加 FIDO2 API 的依赖项:

    implementation 'androidx.security:security-fido2:1.0.0'
    
  2. 使用 FIDO2 API 注册凭证
    在 Android 中,你可以使用 Fido2Client 来管理注册和验证请求。

    下面是一个注册流程的代码示例:

    Fido2Client fido2Client = Fido.getFido2Client(context);
    
    // Create a request for a new credential
    PublicKeyCredentialCreationOptions options = new PublicKeyCredentialCreationOptions.Builder()
            .setRp(new PublicKeyCredentialRpEntity("example.com", "Example", null))
            .setUser(new PublicKeyCredentialUserEntity(
                    userId.getBytes(),
                    "user@example.com",
                    "User",
                    null))
            .setChallenge(challenge)
            .setParameters(Arrays.asList(
                    new PublicKeyCredentialParameters(
                            PublicKeyCredentialType.PUBLIC_KEY.toString(),
                            COSEAlgorithmIdentifier.ES256)))
            .build();
    
    // Launch the FIDO2 dialog to start the registration
    Intent intent = fido2Client.getRegisterIntent(options);
    startActivityForResult(intent, REQUEST_CODE_REGISTER);
    

  3. 处理注册响应onActivityResult 中处理用户完成注册后的返回结果:

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == REQUEST_CODE_REGISTER) {
            if (resultCode == RESULT_OK) {
                // Get the response from FIDO2 API
                AuthenticatorAttestationResponse response = AuthenticatorAttestationResponse.deserializeFromBytes(
                        data.getByteArrayExtra(Fido.FIDO2_KEY_RESPONSE_EXTRA));
    
                // Send the response to the server for verification
                sendAttestationToServer(response);
            }
        }
    }
    

  4. 验证凭证
    类似地,用户登录时需要使用 PublicKeyCredentialRequestOptions 来请求凭证验证:

    PublicKeyCredentialRequestOptions requestOptions = new PublicKeyCredentialRequestOptions.Builder()
            .setChallenge(challenge)
            .setRpId("example.com")
            .build();
    
    // Start the authentication process
    Intent intent = fido2Client.getSignIntent(requestOptions);
    startActivityForResult(intent, REQUEST_CODE_SIGN);
    

Google Play 动态交付的流程

动态交付(Dynamic Delivery)是 Google Play 提供的一种机制,允许应用按需下载并安装部分功能模块,节省存储空间并加快应用的初始安装速度。

  1. 配置动态特性模块
    在 Android Studio 的 dynamic-feature 模块中定义各个功能模块。

  2. 安装特性模块
    应用运行时根据用户的需求动态下载和加载模块:

    SplitInstallManager manager = SplitInstallManagerFactory.create(context);
    
    SplitInstallRequest request = SplitInstallRequest.newBuilder()
            .addModule("my_dynamic_feature")
            .build();
    
    manager.startInstall(request)
            .addOnSuccessListener(sessionId -> {
                // Module installation successful
            })
            .addOnFailureListener(exception -> {
                // Handle installation failure
            });
    

通过这些步骤,你可以在 Android 上成功实现 FIDO2 API 的集成,并利用动态交付机制优化应用性能。

Android FIDO2 API 即将更新其证明格式,从基于 SafetyNet API 的证明方案转移到基于硬件支持的密钥证明方案,要求开发者采取行动进行平稳过渡。

2019 年,Android 推出了 FIDO2 API,允许在 Android 设备上生成一个带有证明的设备绑定的 FIDO2 凭证。随着 SafetyNet API 的淘汰,FIDO2 API 需要过渡到基于硬件支持的密钥证明的新方案。从 2024 年 11 月开始,Android 将更新 FIDO2 API 以生成基于硬件的密钥证明。开发者可以选择性地采用这种新的证明方案,并在 2025 年 4 月初之前有控制权来测试和逐步部署,以便在接下来的 6 个月里管理过渡。到 2025 年 4 月初,硬件支持的密钥证明将成为默认方式,同时不再提供 SafetyNet 证书。为了确保应用程序能够正确解析新的证明语句,开发者需要在切换日期之前实现对新证明语句的支持或切换到 passkey API。对于 Web 应用程序,需要使用 Chrome 130 或更高版本,并参与 WebAuthn attestationFormats 原始试验。对于使用 FIDO2 Play Services API 的 Android 应用程序,需要 Play Services 版本 22.0.0 或更高版本,并更新相关依赖项以指定 android-key 作为证明格式。Android 开发者博客是该信息的来源。

观点

  • Android FIDO2 API 将不再基于 SafetyNet API 进行证明,而是采用硬件支持的密钥证明方案。
  • 开发者可以在 2024 年 11 月至 2025 年 4 月初期间选择性地采用新的证明方案,并有机会进行测试和逐步部署。
  • 到 2025 年 4 月初,硬件支持的密钥证明将成为 FIDO2 API 的默认行为。
  • 开发者需要采取行动,要么支持新的证明语句,要么迁移到 passkey API,以确保应用程序的兼容性。
  • Web 应用程序需要使用 Chrome 130 或更高版本,并参与 WebAuthn attestationFormats 原始试验,以请求硬件支持的密钥证明。
  • Android 应用程序需要 Play Services 版本 22.0.0 或更高版本,并更新相关依赖项以指定 android-key 作为证明格式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值