验证码认证能力支持用户实现手机验证码快捷登录功能,也支持仅用于发送验证码或通知类短信。以下介绍具体对接步骤。
启用验证码认证
创建一个应用,认证方式勾选“短信认证”,然后选择认证时使用的短信签名:
系统默认会有一条“阿里云IDaaS”的签名,如果想自定义签名,可以在【短信管理】中添加:
短信模板默认使用“快捷登录验证码短信”:
获取应用密钥
应用密钥用于签名请求参数,Hash 方式为 HmacSHA256 + Hex,调用接口时会用到。
配置短信防暴策略
您可以控制发送短信的频率,避免恶意频繁调用发送短信验证码接口。
目前支持从 2 个维度控制发送短信的频率,包括客户端IP和手机号。手机号是必须的,客户端IP是可选的,只有传入了对应维度的数据,才能进行限流控制。客户可根据实际情况调整限制次数。
验证码认证流程
以下总结 3 个验证码认证的常见场景。
正常流程
一次性登录成功。
图形验证码流程
获取验证码过于频繁,需要先通过图形验证码检查,才能获取验证码。
阻断流程
获取验证码次数过多,一段时间内都无法再获取验证码。
验证码认证接口
验证码认证使用同一个接口,通过 DoraemonAction 参数区分不同的具体行为,不同的 DoraemonAction 对应的请求参数和响应结果会不同。具体请求参数都通过 MobileExtendParamsJson 传递。
请求参数
名称 | 类型 | 必填 | 示例值 | 描述 |
ApplicationExternalId | String | 是 | A0000001 | 应用 ID,该字段在创建应用时指定,在应用详情页中查看 |
ServiceCode | String | 是 | SMS | 认证方式标识,此处固定为:SMS |
DoraemonAction | String | 是 | SendSmsCode | 短信认证相关 发送短信验证码:SendSmsCode 检查短信验证码:VerifySmsCode 获取图形验证码:GetCaptchaCode 检查图形验证码:VerifyCaptchaCode 短信相关 发送短信:Send |
MobileExtendParamsJson | String | 是 | eyJpZCI6ImI4NzkyOD | 业务参数先转成JSON 字符串,再 base64 编码 |
MobileExtendParamsJsonSign | String | 是 | 2d1adaf****8bfad | MobileExtendParamsJson 的签名值,使用应用密钥签名 |
XClientIP | String | 否 | 10.11.XXX.XX | 客户端真实IP,建议传递该字段,安全认证服务会基于该字段进行智能安全风控检测。基于客户端IP的短信防暴策略也需要此参数。 |
常见状态码
名称 | 描述 |
Params.Illegal | 参数非法,通常是验证码标志无效,包括:不存在、已过期(5分钟)、验证次数过多(3次)、已验证 |
Operation.Failure.SmsAuth.Overflow.Captcha | 超过调用次数限制,需要通过图形验证码 |
Operation.Failure.SmsAuth.Overflow.Pause | 超过调用次数限制,短时间内无法再次调用 |
发送短信验证码
DoraemonAction 为 SendSmsCode。
MobileExtendParamsJson 参数
名称 | 类型 | 必填 | 示例值 | 描述 |
id | String | 否 | b87928958d93caca4 | 验证码标志 |
businessId | String | 是 | QUICK_LOGIN | 业务标志,QUICK_LOGIN 为快捷登录 |
phoneRegion | String | 否 | 86 | 手机区号,默认为 86 |
phoneNumber | String | 是 | 186****2909 | 手机号 |
返回数据
名称 | 类型 | 示例值 | 描述 |
Success | boolean | true | 操作是否成功 |
Code | String | Opreation.Success | 状态码,参考上表 |
Message | String | Opreation.Success | 具体的描述信息 |
RequestId | String | 1C0EE50A-B3BB-42FD-AB59 | 请求ID |
Data | String | 具体的业务数据 |
Data 数据
名称 | 类型 | 示例值 | 描述 |
id | String | b87928958d93caca405aaf | 验证码标志,验证时需要使用 |
检查短信验证码
DoraemonAction 为 VerifySmsCode。
MobileExtendParamsJson 参数
名称 | 类型 | 必填 | 示例值 | 描述 |
id | String | 是 | b87928958d93caca4 | 验证码标志 |
answer | String | 是 | 2319 | 短信验证码值 |
返回数据
名称 | 类型 | 示例值 | 描述 |
Success | boolean | true | 操作是否成功 |
Code | String | Opreation.Success | 状态码,参考上表 |
Message | String | Opreation.Success | 具体的描述信息 |
RequestId | String | 1C0EE50A-B3BB-42FD | 请求ID |
Data | String | 具体的业务数据 |
Data 数据
名称 | 类型 | 示例值 | 描述 |
id | String | b87928958d93caca405aaf | 验证码标志 |
matched | Boolean | true | 验证码是否匹配 |
reachFailedCountThreshold | Boolean | false | 达到失败次数阈值,如果为 true,需要重新调用发送短信验证码接口 |
获取图形验证码
DoraemonAction 为 GetCaptchaCode。
MobileExtendParamsJson 参数
名称 | 类型 | 必填 | 示例值 | 描述 |
id | String | 否 | b87928958d93caca4 | 验证码标志 |
返回数据
名称 | 类型 | 示例值 | 描述 |
Success | boolean | true | 操作是否成功 |
Code | String | Opreation.Success | 状态码,参考上表 |
Message | String | Opreation.Success | 具体的描述信息 |
RequestId | String | 1C0EE50A-B3BB-42FD-AB59 | 请求ID |
Data | String | 具体的业务数据 |
Data 数据
名称 | 类型 | 示例值 | 描述 |
id | String | b87928958d93caca405aaf | 图形验证码标志,验证图形验证码时需要使用 |
question | String | iVBORw0KGgoAAAANS | base64 图片验证码 |
base64 图片验证码展示为图片时,需添加前缀 data:image/png;base64,{base64图片验证码}
检查图形验证码
DoraemonAction 为 VerifyCaptchaCode。
MobileExtendParamsJson 参数
名称 | 类型 | 必填 | 示例值 | 描述 |
id | String | 是 | b87928958d93caca4 | 图形验证码标志 |
answer | String | 是 | 2319 | 图形验证码值 |
返回数据
名称 | 类型 | 示例值 | 描述 |
Success | boolean | true | 操作是否成功 |
Code | String | Opreation.Success | 状态码,参考上表 |
Message | String | Opreation.Success | 具体的描述信息 |
RequestId | String | 1C0EE50A-B3BB-42FD-AB59 | 请求ID |
Data | String | 具体的业务数据 |
Data 数据
名称 | 类型 | 示例值 | 描述 |
id | String | b87928958d93caca405aaf | 验证码标志 |
matched | Boolean | true | 验证码是否匹配 |
reachFailedCountThreshold | Boolean | false | 达到失败次数阈值,如果为 true,需要重新调用发送短信验证码接口 |
发送短信
DoraemonAction 为 Send。
MobileExtendParamsJson 参数
名称 | 类型 | 必填 | 示例值 | 描述 |
signName | String | 是 | 阿里云IDaaS | 短信签名,需要先通过审核 |
templateCode | String | 是 | QUICK_LOGIN | 短信模板,需要先通过审核 |
templateParams | String | 否 | {"code":"AKtT"} | 模板参数,JSON 字符串 |
phone | String | 是 | 86-1390000**** | 手机号,格式为:区号-号码 |
JAVA SDK
Maven 依赖
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-idaas-doraemon</artifactId>
<version>[1.3.1,)</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>[4.4.3,)</version>
</dependency>
示例应用
在运行示例应用前,请先在 application.yml 文件中配置 RAM 账号AK 和应用 ID及密钥:
idaas:
doraemon:
#阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
#强烈建议不要把 AccessKey 和 AccessKeySecret 保存到代码里,会存在密钥泄漏风险
accessKeyId:
accessKeySecret:
applicationExternalId:
applicationExternalSecret: