使用SMS Retriever API安全读取OTP验证码

8次阅读
没有评论

使用SMS Retriever API读取OTP短信***

问题描述

安装了一个Android应用,并在注册过程中发现该应用能够读取其手机收到的短信中的验证码(OTP)内容,而并没有申请读取消息权限。询问此行为背后的机制是什么,以及这样的操作是否合理。

解决方案

方案1:利用SMS Retriever API

根据最佳回答,在Android系统中存在专为验证目的而设计的不同API,而不是普通的短信读取权限。官方文档指出,Google身份验证器中的SMS Retrieval API允许应用从服务端进行SMS验证码的验证,无需直接读取设备上的短信内容。

具体实现步骤

  1. 获取项目ID和API密钥

    • 为了使用SMS Retriever API,首先需要在Google Cloud Project中注册一个新项目,并启用相关服务。
    • 在注册后,通过设置获取项目的API密钥。
  2. 修改Manifest文件添加必要的权限声明

将以下权限声明添加到应用的AndroidManifest.xml
xml
<uses-permission android:name="android.permission.SEND_SMS"/>

  1. 启动短信接收意图

推送OTP(即一次性验证码)时,需以广播的形式发送一个包含特殊数据标签的SMS Retriever URL。该URL通过Android系统内的Activity(如Activity com.google.android.gms.auth.api.phone.AccountManagerActivity 通常用于此目的)来接收消息。

  1. 回调接收短信处理结果

创建一个自定义BroadcastReceiver以监听短信到达,并利用提供的API密钥对数据进行校验。
“`java
public class SMSReceiveReceiver extends BroadcastReveiver {
private static final String TAG = “SMSReceiveReceiver”;

   @Override
   public void onReceive(Context context, Intent intent) {
       if (Telephony.Sms.Intents.SMS_RETRIEVED_ACTION.equals(intent.getAction())) {
           Bundle extras = intent.getExtras();
           if (extras != null) {
               Object[] pdusObj = (Object[]) extras.get("pdus");
               StringBuilder msg = new StringBuilder();

               for (int i = 0; i < pdusObj.length; ++i) {
                   SmsMessage smsCurrentMsg = SmsMessage.createFromPdu((byte[]) pdusObj[i], extras);
                   if(i == 1) break;
                   msg.append(smsCurrentMsg.displayMessageBody());
               }

               String msgString = msg.toString().trim();
               // 验证验证码
               if (verifyOtp(msgString, YOUR_API_KEY)) {
                   Log.d(TAG, "OTP验证成功");
               } else {
                   Log.e(TAG, "OTP验证失败");
               }
           }
       }
   }

   private boolean verifyOtp(String otp, String apiKey) {
       // 根据API密钥和短信内容进行验证码的验证,实际操作参照官方文档编写逻辑
       return true;  // 示例返回值
   }

}
“`

  1. 发送验证码

在生成并发送OTP代码时遵循Google SMS Retrieval API的指导来构建正确的SMS Retriever URL。

通过上述方式可以实现应用读取短信中的内容,但此操作必须基于SMS Retriever API的权限和规则进行。对于开发者的建议,请注意检查短信获取API的应用范围,确保其安全性和用户隐私保护符合相关法律与伦理标准。

总结
该问题涉及的是利用特定API技术机制间接读取设备消息的安全性问题。了解SMS Retriever API及其使用方法有助于开发者更好地实现注册和认证功能,并同时保障用户数据安全。

正文完