验证码认证接入

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

启用验证码认证

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

系统默认会有一条阿里云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

超过调用次数限制,短时间内无法再次调用。

发送短信验证码

DoraemonActionSendSmsCode。

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

验证码标志,验证时需要使用。

检查短信验证码

DoraemonActionVerifySmsCode。

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,需要重新调用发送短信验证码接口。

获取图形验证码

DoraemonActionGetCaptchaCode。

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图片验证码}

检查图形验证码

DoraemonActionVerifyCaptchaCode。

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,需要重新调用发送短信验证码接口。

发送短信

DoraemonActionSend。

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