验证码认证能力支持用户实现手机验证码快捷登录功能,也支持仅用于发送验证码或通知类短信。以下介绍具体对接步骤。
启用验证码认证
创建一个应用,认证方式勾选短信认证,然后选择认证时使用的短信签名。
系统默认会有一条阿里云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: