验证码认证接入

验证码认证能力支持用户实现手机验证码快捷登录功能,也支持仅用于发送验证码或通知类短信。以下介绍具体对接步骤。

启用验证码认证

创建一个应用,认证方式勾选“短信认证”,然后选择认证时使用的短信签名:短信认证应用

系统默认会有一条“阿里云IDaaS”的签名,如果想自定义签名,可以在【短信管理】中添加:短信签名

短信模板默认使用“快捷登录验证码短信”:短信模板

获取应用密钥

应用秘钥

应用密钥用于签名请求参数,Hash 方式为 HmacSHA256 + Hex,调用接口时会用到。

配置短信防暴策略

您可以控制发送短信的频率,避免恶意频繁调用发送短信验证码接口。image

目前支持从 2 个维度控制发送短信的频率,包括客户端IP和手机号。手机号是必须的,客户端IP是可选的,只有传入了对应维度的数据,才能进行限流控制。客户可根据实际情况调整限制次数。

验证码认证流程

以下总结 3 个验证码认证的常见场景。

正常流程

一次性登录成功。3A7112EE-E3FD-4bae-BC09-697B7CCF4324

图形验证码流程

获取验证码过于频繁,需要先通过图形验证码检查,才能获取验证码。4A1BE9D5-811A-4d39-96EE-09901275D3D8

阻断流程

获取验证码次数过多,一段时间内都无法再获取验证码。A5F652E5-A0AB-4993-ADDD-8B71885BA4BC

验证码认证接口

验证码认证使用同一个接口,通过 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: 

运行效果547917dbd890b028ba79dfd8dfada58a.png