鸿蒙生物识别集成:指纹/人脸支付级验证的最佳实践

举报
鱼弦 发表于 2025/10/30 14:11:01 2025/10/30
【摘要】 一、引言在移动支付、金融理财、隐私数据访问等高安全场景中,​​传统密码/验证码验证方式​​逐渐暴露出易泄露、易遗忘、安全性不足等问题。生物识别技术(如指纹、人脸)凭借其​​唯一性、便捷性、高安全性​​的特点,成为当前移动应用身份验证的主流方案。尤其在支付级场景中,生物识别验证需满足​​高精度、防伪造、低延迟​​的严苛要求,直接关系到用户的资金安全与体验信任。鸿蒙(HarmonyOS)作为面向...


一、引言

在移动支付、金融理财、隐私数据访问等高安全场景中,​​传统密码/验证码验证方式​​逐渐暴露出易泄露、易遗忘、安全性不足等问题。生物识别技术(如指纹、人脸)凭借其​​唯一性、便捷性、高安全性​​的特点,成为当前移动应用身份验证的主流方案。尤其在支付级场景中,生物识别验证需满足​​高精度、防伪造、低延迟​​的严苛要求,直接关系到用户的资金安全与体验信任。
鸿蒙(HarmonyOS)作为面向全场景的分布式操作系统,提供了​​原生级生物识别能力​​(支持指纹、人脸),并通过​​统一的安全架构与硬件级加密保护​​,确保生物特征数据仅在设备本地处理,不上传云端,从源头保障用户隐私。本文将深入探讨鸿蒙生物识别集成的​​技术实现、应用场景、代码示例、原理解析及支付级验证的最佳实践​​,帮助开发者构建安全、流畅的生物识别验证体系。

二、技术背景

1. 生物识别的核心优势与挑战

  • ​核心优势​​:
    • ​唯一性​​:每个人的指纹/人脸特征具有高度独特性,难以被仿冒。
    • ​便捷性​​:用户仅需通过指纹触摸或人脸注视即可完成验证,无需记忆复杂密码。
    • ​高安全性​​:结合设备硬件级加密(如SE安全芯片、TEE可信执行环境),生物特征数据在采集、比对过程中全程加密,防止泄露。
  • ​主要挑战​​:
    • ​防伪造​​:需抵御2D照片、3D面具、指纹膜等伪造攻击(支付级场景要求通过活体检测)。
    • ​精准度​​:在弱光、手指污渍、面部遮挡等复杂环境下仍能保持高识别率。
    • ​隐私合规​​:生物特征数据属于敏感个人信息,需遵循最小必要原则(如不存储原始图像,仅保留特征模板)。

2. 鸿蒙生物识别能力概述

鸿蒙通过​​@ohos.biometrics​​(或类似模块,具体参考官方文档)提供统一的生物识别API,支持以下核心功能:
  • ​指纹识别​​:采集用户指纹图像,提取特征模板并与预存模板比对,支持活体检测(防假指纹)。
  • ​人脸识别​​:通过前置摄像头采集人脸图像,提取面部特征(如五官轮廓、骨骼结构),结合活体检测(如眨眼、张嘴动作)验证真人身份。
  • ​安全保护​​:生物特征数据仅在设备本地处理,不上传云端;特征模板加密存储于安全区域(如TEE),即使应用被逆向也无法获取原始数据。
  • ​多模态支持​​:部分高端设备支持指纹+人脸融合验证,进一步提升安全性。

3. 支付级验证的特殊要求

支付级生物识别验证(如移动支付、转账确认)需满足以下严格标准:
  • ​FAR(错误接受率)≤0.001%​​:每10万次验证最多允许1次误通过(将他人识别为合法用户)。
  • ​FRR(错误拒绝率)≤1%​​:每100次合法用户验证最多允许1次误拒绝(将合法用户识别为非法)。
  • ​活体检测​​:必须通过动态行为(如眨眼、头部转动)或光学特性(如红外反射)验证用户为真实活体,而非照片/视频/面具。
  • ​硬件级加密​​:生物特征数据的采集、比对、存储全程依赖设备安全芯片(如SE、TEE),防止中间人攻击或内存提取。

三、应用使用场景

1. 移动支付验证

​需求​​:用户在进行支付(如扫码付款、转账)时,通过指纹或人脸验证身份,替代传统密码输入,提升支付效率与安全性。
​典型场景​​:电商APP的“确认支付”按钮点击后,弹出生物识别验证弹窗,验证通过后完成交易。

2. 金融理财操作

​需求​​:用户进行高风险操作(如购买理财产品、修改绑定银行卡)时,需通过生物识别二次验证,防止账户被盗用。
​典型场景​​:银行类APP的“赎回基金”功能,需用户先输入交易密码,再通过人脸识别确认本人操作。

3. 隐私数据访问

​需求​​:用户查看敏感信息(如健康数据、通讯录黑名单、加密日记)时,通过指纹/人脸验证权限,避免他人窥探。
​典型场景​​:健康类APP的“查看历史心率记录”页面,需用户通过人脸识别后才能访问详细数据。

4. 设备解锁与权限管理

​需求​​:用户解锁设备或授权第三方应用访问敏感权限(如通讯录、位置)时,通过生物识别快速验证,替代传统锁屏密码。
​典型场景​​:用户设置“仅允许通过指纹解锁相册应用”,当打开相册时自动触发指纹验证。

四、不同场景下详细代码实现

环境准备

  • ​开发工具​​:DevEco Studio(鸿蒙官方IDE,基于IntelliJ IDEA)。
  • ​SDK版本​​:HarmonyOS 3.2+(推荐最新稳定版,确保生物识别API完整支持)。
  • ​语言​​:ArkTS(鸿蒙主流开发语言)。
  • ​关键模块​​:使用@ohos.biometrics(或@ohos.security.biometric,具体根据SDK版本调整)实现生物识别功能,结合@ohos.hilog输出调试日志。

场景1:指纹支付级验证(支付确认场景)

​需求​​:用户在支付页面点击“确认支付”后,弹出指纹验证弹窗,验证通过后完成交易,验证失败则提示用户重试或切换密码验证。

1. 生物识别工具类(封装指纹验证逻辑)

// utils/BiometricAuth.ets
import biometric from '@ohos.biometrics'; // 鸿蒙生物识别模块
import hilog from '@ohos.hilog'; // 调试日志模块

const BIOMETRIC_TYPE = biometric.BiometricType.FINGERPRINT; // 仅使用指纹验证(可扩展为人脸)
const AUTH_REQUEST_TIMEOUT = 10000; // 验证超时时间(毫秒)

/**
 * 指纹支付级验证工具
 */
export class FingerprintAuth {
  /**
   * 发起指纹验证请求(支付级,需活体检测)
   * @param callback 验证结果回调(success: 是否通过, error?: 错误信息)
   */
  static async authenticatePayment(callback: (success: boolean, error?: string) => void): Promise<void> {
    try {
      hilog.info(0x0000, 'BiometricAuth', '发起指纹支付验证');

      // 1. 检查设备是否支持指纹识别
      const isSupported = await biometric.isBiometricAuthenticationAvailable(BIOMETRIC_TYPE);
      if (!isSupported) {
        callback(false, '设备不支持指纹识别');
        return;
      }

      // 2. 检查是否已录入指纹(用户需提前在系统设置中录入指纹)
      const hasEnrolled = await biometric.hasEnrolledBiometrics(BIOMETRIC_TYPE);
      if (!hasEnrolled) {
        callback(false, '未录入指纹,请先在系统设置中录入');
        return;
      }

      // 3. 发起支付级验证(活体检测+高精度比对)
      const authResult = await biometric.authenticate({
        biometricType: BIOMETRIC_TYPE,
        requestId: 'payment_auth_' + Date.now(), // 唯一请求ID(用于日志追踪)
        timeout: AUTH_REQUEST_TIMEOUT,
        // 支付级验证需启用活体检测(部分设备通过参数或系统配置实现)
        // 注:鸿蒙具体API可能需通过安全策略或设备能力标志位启用活体
      });

      if (authResult === biometric.AuthResult.SUCCESS) {
        hilog.info(0x0000, 'BiometricAuth', '指纹验证成功');
        callback(true); // 验证通过
      } else {
        const errorMsg = this.getAuthErrorMessage(authResult);
        hilog.warn(0x0000, 'BiometricAuth', '指纹验证失败: %{public}s', errorMsg);
        callback(false, errorMsg); // 验证失败
      }
    } catch (error) {
      hilog.error(0x0000, 'BiometricAuth', '指纹验证异常: %{public}s', JSON.stringify(error));
      callback(false, '验证过程异常,请重试');
    }
  }

  // 将鸿蒙原生验证结果转换为可读错误信息
  private static getAuthErrorMessage(result: number): string {
    switch (result) {
      case biometric.AuthResult.USER_CANCELLED:
        return '用户取消验证';
      case biometric.AuthResult.TIMEOUT:
        return '验证超时,请重试';
      case biometric.AuthResult.FAILED:
        return '指纹不匹配,请重试';
      case biometric.AuthResult.NOT_ENROLLED:
        return '未录入指纹';
      default:
        return '验证失败';
    }
  }
}

2. 支付页面集成指纹验证

// pages/PaymentPage.ets
import { FingerprintAuth } from '../utils/BiometricAuth';

@Entry
@Component
struct PaymentPage {
  @State paymentAmount: string = '100.00'; // 支付金额
  @State isVerifying: boolean = false; // 是否正在验证
  @State verifyResult: string = ''; // 验证结果提示

  // 模拟支付确认(实际应调用支付API)
  private async confirmPayment() {
    this.isVerifying = true;
    this.verifyResult = '';

    // 发起指纹验证
    await FingerprintAuth.authenticatePayment((success: boolean, error?: string) => {
      this.isVerifying = false;
      if (success) {
        this.verifyResult = '✅ 指纹验证成功,支付已完成!';
        // 实际逻辑:调用支付API提交交易
        console.log('支付成功,金额:', this.paymentAmount);
      } else {
        this.verifyResult = `❌ 指纹验证失败: ${error || '未知错误'}`;
        // 实际逻辑:提示用户使用密码或其他方式验证
      }
    });

    // 若需支持验证失败后切换密码验证,可在此扩展逻辑
  }

  build() {
    Column() {
      Text('支付确认')
        .fontSize(24)
        .fontWeight(FontWeight.Bold)
        .margin(20)

      Text(`支付金额: ¥${this.paymentAmount}`)
        .fontSize(18)
        .margin(10)

      Button('确认支付')
        .onClick(() => {
          this.confirmPayment();
        })
        .margin(20)
        .enabled(!this.isVerifying) // 验证中禁用按钮

      // 验证结果提示
      if (this.verifyResult) {
        Text(this.verifyResult)
          .fontSize(16)
          .fontColor(this.verifyResult.includes('✅') ? '#007DFF' : '#FF0000')
          .margin(20)
          .textAlign(TextAlign.Center)
      }

      // 验证中状态
      if (this.isVerifying) {
        Text('正在进行指纹验证,请将手指放在指纹识别区...')
          .fontSize(14)
          .fontColor('#666666')
          .margin(20)
      }
    }
    .width('100%')
    .height('100%')
    .justifyContent(FlexAlign.Center)
    .padding(20)
  }
}

原理解释

  • ​支付级验证流程​​:用户点击“确认支付” → 调用FingerprintAuth.authenticatePayment→ 检查设备支持性与指纹录入状态 → 发起带活体检测的指纹验证 → 根据结果提示用户。
  • ​安全保护​​:生物特征数据仅在设备本地处理,验证结果通过鸿蒙安全API返回,不暴露原始指纹图像。
  • ​用户体验​​:验证中禁用支付按钮,避免重复点击;通过颜色区分成功/失败提示,提升可读性。

场景2:人脸识别验证(隐私数据访问场景)

​需求​​:用户查看健康数据(如心率记录)时,弹出人脸识别验证弹窗,验证通过后展示详细数据,防止他人未经授权访问。

1. 人脸识别工具类

// utils/FaceAuth.ets
import biometric from '@ohos.biometrics';
import hilog from '@ohos.hilog';

const BIOMETRIC_TYPE = biometric.BiometricType.FACE; // 仅使用人脸识别

/**
 * 人脸识别验证工具(隐私数据访问场景)
 */
export class FaceAuth {
  static async authenticatePrivacyAccess(callback: (success: boolean, error?: string) => void): Promise<void> {
    try {
      hilog.info(0x0000, 'FaceAuth', '发起人脸隐私验证');

      // 检查设备是否支持人脸识别
      const isSupported = await biometric.isBiometricAuthenticationAvailable(BIOMETRIC_TYPE);
      if (!isSupported) {
        callback(false, '设备不支持人脸识别');
        return;
      }

      // 检查是否已录入人脸
      const hasEnrolled = await biometric.hasEnrolledBiometrics(BIOMETRIC_TYPE);
      if (!hasEnrolled) {
        callback(false, '未录入人脸,请先在系统设置中录入');
        return;
      }

      // 发起人脸验证(支付级可启用活体检测,通过设备能力或参数配置)
      const authResult = await biometric.authenticate({
        biometricType: BIOMETRIC_TYPE,
        requestId: 'privacy_auth_' + Date.now(),
        timeout: 10000
      });

      if (authResult === biometric.AuthResult.SUCCESS) {
        hilog.info(0x0000, 'FaceAuth', '人脸验证成功');
        callback(true);
      } else {
        const errorMsg = this.getAuthErrorMessage(authResult);
        hilog.warn(0x0000, 'FaceAuth', '人脸验证失败: %{public}s', errorMsg);
        callback(false, errorMsg);
      }
    } catch (error) {
      hilog.error(0x0000, 'FaceAuth', '人脸验证异常: %{public}s', JSON.stringify(error));
      callback(false, '验证过程异常,请重试');
    }
  }

  private static getAuthErrorMessage(result: number): string {
    switch (result) {
      case biometric.AuthResult.USER_CANCELLED:
        return '用户取消验证';
      case biometric.AuthResult.TIMEOUT:
        return '验证超时,请重试';
      case biometric.AuthResult.FAILED:
        return '人脸不匹配,请重试';
      case biometric.AuthResult.NOT_ENROLLED:
        return '未录入人脸';
      default:
        return '验证失败';
    }
  }
}

2. 健康数据页面集成人脸验证

// pages/HealthDataPage.ets
import { FaceAuth } from '../utils/FaceAuth';

@Entry
@Component
struct HealthDataPage {
  @State heartRateData: string = '心率: 72 BPM (今日平均)'; // 模拟健康数据
  @State isVerifying: boolean = false;
  @State verifyResult: string = '';

  private async showHealthData() {
    this.isVerifying = true;
    this.verifyResult = '';

    await FaceAuth.authenticatePrivacyAccess((success: boolean, error?: string) => {
      this.isVerifying = false;
      if (success) {
        this.verifyResult = '✅ 人脸验证成功,正在加载健康数据...';
        // 模拟加载数据(实际应调用健康API)
        setTimeout(() => {
          this.heartRateData = '心率: 72 BPM (今日平均)\n步数: 8,500 步\n睡眠: 7小时30分';
        }, 1000);
      } else {
        this.verifyResult = `❌ 人脸验证失败: ${error || '未知错误'}`;
      }
    });
  }

  build() {
    Column() {
      Text('健康数据')
        .fontSize(24)
        .fontWeight(FontWeight.Bold)
        .margin(20)

      // 健康数据内容(验证通过后显示)
      if (this.heartRateData) {
        Text(this.heartRateData)
          .fontSize(16)
          .margin(20)
          .padding(15)
          .backgroundColor('#F5F5F5')
          .borderRadius(8)
      }

      // 验证提示
      if (this.verifyResult) {
        Text(this.verifyResult)
          .fontSize(16)
          .fontColor(this.verifyResult.includes('✅') ? '#007DFF' : '#FF0000')
          .margin(10)
          .textAlign(TextAlign.Center)
      }

      // 触发验证的按钮
      if (!this.heartRateData || this.heartRateData.includes('心率:')) {
        Button('查看健康数据(需人脸验证)')
          .onClick(() => {
            this.showHealthData();
          })
          .margin(20)
          .enabled(!this.isVerifying)
      }

      // 验证中状态
      if (this.isVerifying) {
        Text('正在进行人脸验证,请正对摄像头并保持静止...')
          .fontSize(14)
          .fontColor('#666666')
          .margin(20)
      }
    }
    .width('100%')
    .height('100%')
    .justifyContent(FlexAlign.Center)
    .padding(20)
  }
}

五、原理解释与核心特性

1. 核心原理流程图

graph TD
    A[用户触发敏感操作(如支付/查看隐私数据)] --> B{是否启用生物识别验证?}
    B -->|否| C[执行常规验证(如密码)]
    B -->|是| D[调用鸿蒙生物识别API]
    D --> D1[检查设备支持性(是否支持指纹/人脸)]
    D1 -->|不支持| E[提示用户使用其他方式]
    D1 -->|支持| D2[检查是否已录入生物特征]
    D2 -->|未录入| E
    D2 -->|已录入| D3[发起支付级验证(活体检测+高精度比对)]
    D3 --> D4[用户通过指纹触摸/人脸注视完成验证]
    D4 --> D5[鸿蒙底层比对特征模板(本地加密处理)]
    D5 --> D6{验证结果}
    D6 -->|成功| F[执行敏感操作(如完成支付/显示数据)]
    D6 -->|失败| G[提示用户重试或切换验证方式]

2. 核心特性

  • ​支付级安全​​:支持活体检测(防照片/面具攻击),错误接受率(FAR)与错误拒绝率(FRR)达到金融级标准。
  • ​本地化处理​​:生物特征数据仅在设备本地采集、比对、存储,不上传云端,隐私零泄露。
  • ​硬件级加密​​:特征模板加密存储于TEE(可信执行环境)或SE(安全芯片),即使设备root也无法提取原始数据。
  • ​多模态扩展​​:部分设备支持指纹+人脸融合验证,进一步提升安全性(如支付时需同时验证指纹和人脸)。

六、原理流程图以及原理解释

1. 生物识别支付级验证详细流程

sequenceDiagram
    participant User as 用户
    participant App as 应用逻辑
    participant BiometricAPI as 鸿蒙生物识别API
    participant DeviceHardware as 设备硬件(指纹/摄像头)
    participant SecureStorage as 安全存储(TEE/SE)

    User->>App: 点击“确认支付”/“查看隐私数据”
    App->>BiometricAPI: 发起生物识别验证请求(支付级)
    BiometricAPI->>DeviceHardware: 激活指纹传感器/前置摄像头
    DeviceHardware->>User: 提示“请放置手指/正对摄像头”
    User->>DeviceHardware: 触摸指纹/保持人脸静止
    DeviceHardware->>SecureStorage: 提取生物特征(加密)
    SecureStorage->>BiometricAPI: 返回特征模板(加密)
    BiometricAPI->>SecureStorage: 比对预存特征模板(加密)
    SecureStorage->>BiometricAPI: 返回比对结果(成功/失败)
    BiometricAPI->>App: 返回验证结果
    App->>User: 提示“验证成功”并执行操作/“验证失败”请重试

2. 原理解释

  • ​特征提取与比对​​:设备硬件(指纹传感器/摄像头)采集用户的生物特征(如指纹纹路、面部轮廓),通过加密算法提取特征模板(非原始图像),与设备安全存储中预存的特征模板进行比对。
  • ​活体检测​​:通过光学特性(如红外反射差异)、动态行为(如眨眼频率)或3D结构光技术,区分真实活体与伪造物(如照片、面具)。
  • ​安全存储​​:预存的生物特征模板加密后存储于TEE(可信执行环境)或SE(安全芯片),仅能被鸿蒙系统级API访问,应用无法直接读取原始数据。

七、环境准备

1. 开发环境配置

  • ​安装DevEco Studio​​:从下载并安装最新版。
  • ​创建项目​​:选择“Empty Ability”模板,创建支持ArkTS的鸿蒙应用。
  • ​权限配置​​:在module.json5中声明生物识别权限(部分设备可能无需显式声明,但需确保系统设置中已开启生物识别功能):
    {
      "module": {
        "requestPermissions": [
          { "name": "ohos.permission.USE_BIOMETRIC" } // 生物识别使用权限
        ]
      }
    }

2. 设备要求

  • ​硬件支持​​:测试设备需支持指纹传感器或前置摄像头(人脸识别),且已在系统设置中录入至少一枚指纹或人脸。
  • ​系统版本​​:鸿蒙OS 3.0+(推荐3.2+以获得完整的支付级验证API支持)。

八、实际详细应用代码示例实现

综合示例:支付与人脸验证的全链路集成

​需求​​:电商APP的支付页面集成指纹验证,健康APP的数据页面集成人脸验证,均满足支付级安全要求。

代码整合

  • ​支付页面​​:复用场景1的PaymentPage.etsFingerprintAuth.ets,实现指纹支付验证。
  • ​健康数据页面​​:复用场景2的HealthDataPage.etsFaceAuth.ets,实现人脸隐私验证。
  • ​扩展功能​​:可在验证失败后提供“使用密码验证”的备用选项(需额外实现密码逻辑)。

九、运行结果

1. 预期效果

  • ​指纹支付验证​​:用户点击“确认支付”后,弹出指纹验证提示,将手指放在指纹识别区,验证通过后显示“支付成功”,失败则提示“指纹不匹配”。
  • ​人脸隐私验证​​:用户点击“查看健康数据”后,弹出人脸验证提示,正对摄像头保持静止,验证通过后展示心率、步数等数据,失败则提示“人脸不匹配”。

2. 实际验证

  • ​设备兼容性​​:在支持指纹/人脸的鸿蒙设备(如Mate 50、P60系列)上测试,确保验证流程流畅。
  • ​安全验证​​:通过尝试使用照片/指纹膜伪造验证,确认活体检测功能有效(应拒绝伪造请求)。

十、测试步骤以及详细代码

1. 测试生物识别验证功能

​步骤​​:
  1. ​基础功能测试​​:在支付页面点击“确认支付”,确认指纹验证弹窗正常弹出,录入指纹的设备能通过验证,未录入的设备提示“未录入指纹”。
  2. ​异常场景测试​​:故意输入错误指纹(或非录入指纹的手指),确认验证失败并提示“指纹不匹配”;验证过程中取消操作,确认提示“用户取消验证”。
  3. ​人脸验证测试​​:在健康数据页面点击“查看健康数据”,确认人脸验证弹窗正常弹出,正对摄像头时验证通过,遮挡面部或使用照片时验证失败。
  4. ​性能测试​​:连续多次触发验证(如10次),确认验证响应时间小于1秒,无卡顿或崩溃。
​预期结果​​:所有正常与异常场景均能正确处理,验证结果符合预期,用户体验流畅。

十一、部署场景

1. 生产环境部署

  • ​用户引导​​:在应用首次启动或功能入口处,提示用户“为保障安全,部分操作需通过指纹/人脸验证”(引导用户录入生物特征)。
  • ​降级策略​​:当生物识别验证失败超过一定次数(如3次)时,提供备用验证方式(如密码、短信验证码),避免用户无法使用核心功能。
  • ​合规审计​​:在应用隐私政策中明确说明生物识别验证的用途(如“用于支付确认与隐私数据访问”),符合GDPR等法规要求。

2. 不同设备适配

  • ​低端设备​​:若设备不支持指纹/人脸(如部分入门级平板),自动禁用生物识别功能,仅提供密码验证。
  • ​多模态支持​​:高端设备(如折叠屏手机)可同时启用指纹+人脸融合验证,进一步提升安全性(需鸿蒙API支持)。

十二、疑难解答

Q1:鸿蒙中如何判断设备是否支持指纹/人脸识别?

​答案​​:通过biometric.isBiometricAuthenticationAvailable(BIOMETRIC_TYPE)方法检查,返回true表示支持,false表示不支持(或未录入生物特征)。

Q2:支付级验证与普通验证的区别是什么?

​答案​​:支付级验证需启用更高的安全策略(如活体检测、更低的FAR阈值),通常通过设备硬件能力或API参数配置实现(鸿蒙具体实现可能需参考官方文档的“安全模式”标志位)。

Q3:生物特征数据会被上传到云端吗?

​答案​​:不会!鸿蒙的生物识别能力设计遵循“数据不出端”原则,特征模板仅在设备本地加密存储与比对,即使应用被逆向也无法获取原始生物数据。

十三、未来展望与技术趋势

1. 技术趋势

  • ​多模态融合验证​​:结合指纹、人脸、声纹、虹膜等多种生物特征,进一步提升验证安全性(如支付时需同时验证指纹和人脸)。
  • ​无感生物识别​​:通过环境感知(如设备握持姿势、行走步态)实现“无接触”验证,提升用户体验(如拿起手机自动解锁)。
  • ​跨设备协同​​:鸿蒙的分布式能力支持生物识别数据在可信设备间安全同步
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。