Skip to content

Signing your Sms Verification JWT

Yugang Zhou edited this page Apr 27, 2019 · 3 revisions

什么是Sms Verification JWT (以下简称JWT)

在验证通过后,Daming会签发一个短时间内即超时的Json Web Token,其含义为“Daming已验证给定的手机号码已通过短信验证,有效期为X秒”。需要短信验证保护的其他API(以下简称Protected),通过验证该JWT确为Daming颁发即可达成验证手机号码的目的。

JWT签发机制

Daming推荐使用非对称密钥对的私钥来签发JWT,再由Protected侧使用对应的公钥来验证JWT。

JWT私钥加载实现

Daming提供了JwtKeyLoader作为密钥加载的抽象,并且提供了JwtPrivateKeyLoader读取RSA私钥。
你可以通过提供JwtKeyLoader的自定义实现并在Spring Application Context中将其注册为smsVerificationJwtSigningKeyLoader来替换该默认实现,

@Component("smsVerificationJwtSigningKeyLoader")
public class MyJwtKeyLoader implements JwtKeyLoader {
    // omitted codes
}

密钥内容加载实现

Daming提供了KeyBytesLoader作为密钥内容加载的抽象,并且提供了FileKeyLoader读取本地文件中的密钥内容。你可以通过环境变量\配置文件设置本地密钥文件的地址:

# application-{profile}.properties
daming.jwt.key.file.location=/home/your-app/a-private-key.der
从Aliyun OSS中读取密钥内容

将私钥部署到服务器上(尤其是在集群环境下,可能需要部署到多个节点)增加了私钥暴露的风险,因此Daming还提供了从Aliyun OSS中读取私钥的实现(记得将私钥保存在私有读写的Bucket中)。 你可以通过环境变量\配置文件设置aliyun OSS的访问地址:

# application-{profile}.properties
# 可使用','分隔多个SVS
daming.jwt.key.provider=aliyun.oss
daming.aliyun.accessKeyId={your key id}
daming.aliyun.accessKeySecret={your key secret}
daming.jwt.key.endpoint=https://oss-cn-shenzhen.aliyuncs.com
daming.jwt.key.bucketName=keepsecret
daming.jwt.key.objectName=private-key.der

JWT过期机制

应该为你签发的JWT设置一个较短的时间,以降低该JWT暴露后的风险,你可以通过环境变量\配置文件设置JWT的过期时间:

# application-{profile}.properties,默认为900秒
daming.jwt.expires=15

Clone this wiki locally