服务描述

该服务主要负责授权token的管理,token类型包括SMS OTP,SWK, HWK,FIDO,常用操作包括token的查询,创建等。

ms-base-token-management-corp 负责CORP的token管理的服务。

ms-token-management-command 负责与token管理相关的业务的domain服务。

主要API

API /[admin|internal]/tfa/tokens/register 注册token

admin:用于backoffice

internal:用于用户注册SMS/HWK token。

API /[admin|internal]/tfa/tokens/update 删除或更新token

dmin:用于backoffice删除SMS/HWK token。

internal:用于用户删除或者更新SMS token。

API /internal/tfa/tokens/request 请求token


步骤:

1. 校验destinationInfo,tokenNo。

2. 根据domain,查询tokenPolicy,通过本地缓存或DB TfaPolicy。获得authzAllowedList、CASEnable、TokenModel。

3. 根据userId和domain,查询TfaUser表,获取用户信息。

4. HWK,调用CAS获取用户和token信息。

如果用户不存在,则创建CAS用户。

如果用户存在且状态是revoke,则硬删除用户,重新创建用户记录。

如果用户存在且状态是block或lock,抛出异常。

如果用户存在且状态是active,do nothing。


保存到t_tfa_token表。


API /internal/tfa/tokens/inquire 查询token

根据tokenno和userId查询token。

步骤:

1. 校验userId,tokenNo。

2. 根据domain,查询tokenPolicy,通过本地缓存或DB TfaPolicy。

3. 根据tokenType,查询用户和token信息。

HWK,查CAS。如果用户状态是block,更新本地数据库。

SWK,查SoftTokenUser表。

4. 查询user和token level的当前计数。

5. 查询TfaToken表,返回token信息。

6. 查询TfaUser表,返回用户信息。根据之前获取的用户信息,更新TfaUser表。

API /internal/tfa/otp/request 创建OTP

创建OTP。

API /internal/tfa/otp/verify 校验SMS/HWK/SWK OTP

SWK OTP: cust-auth → token-mgn/otp/verify → ms-crypto/verify-otp → New HSM

ms-crypto从请求体获取Token seed,用HSM解密后用token seed生成OTP,和请求体的OTP校验。

API /v1/internal/tfa/users/retrieve 查询TFA用户和token信息


retrieve()方法中调用了start(tfaUserRetrieveProperties.getDefaultChain(), context)方法。

TfaUserRetrieveProperties是接口/users/retrieve对应的配置文件,其中getDefaultChain()定义了默认的责任链的每个ChainedProcessor具体实现类。

start()方法定义了责任链的处理:依次调用每个ChainedProcessor具体实现类的chain()方法。直到全部处理完成,或者发生ChainBreak异常。

TfaUserRetrieveGetPolicyProcessor

查询缓存和t_tfa_policy表。

根据配置文件设置channel。

TfaUserRetrieveRetrieveCASTokenProcessor

调用CAS的/api/users接口。

如果返回casUser和token都存在,调用CAS的/api/devices接口查询详细信息。

TfaUserRetrieveRetrieveUserProcessor

查询t_tfa_user表。如果tfaUser不存在而且casUser存在,则创建tfaUser。

TfaUserRetrieveRetrieveSoftTokenProcessor

查询soft_token_usr表,通过userId,channel,tsn,返回user的activated soft token信息,包括device info,otp token,pki token。

TfaUserRetrieveComputeRemainCounterProcessor

通过tfa policy,返回最大重试次数。

TfaUserRetrieveRetrieveTokenProcessor

查询t_tfa_token表,通过userId,channel,返回token list。并同步。

API /v1/internal/tfa/users/create 创建tfa用户

创建用户并存储在本地DB,调用CAS创建用户。

TfaUserCreateGetPolicyProcessor

查询缓存和t_tfa_policy表,通过channel,policy code。设置CAS enable。

TfaUserCreateChkAndCreateUserProcessor

查询t_tfa_user表。如果user不存在,则新增表记录。

TfaUserCreateCreateCasUserProcessor

调用CAS的/api/users接口。如果用户存在则调用CAS接口删除用户。调用CAS接口创建用户。

API /v1/admin/tfa/users/update 更新tfa用户信息

更新用户在本地DB中的信息,调用CAS更新用户信息。

TfaUserGetPolicyProcessor

查询缓存和t_tfa_policy表,通过channel id 和policy id。

TfaUserValidateRequestProcessor

查询t_tfa_user表,通过user ID和domain。校验用户状态

TfaUserChkAndDoActionProcessor

根据请求参数,更新t_tfa_user表。

API /v1/internal/tfa/counter/update 更新用户token重试次数

TfaCounterUpdateChkAndGetPolicyProcessor

查询缓存和t_tfa_policy表,通过channel,返回count level和最大次数。

TfaCounterUpdateValidateRequestProcessor

校验request,包括token type。

查询t_tfa_user表。

TfaCounterUpdateUpdateUserCounterProcessor

更新t_tfa_user表counter最新次数。

TfaCounterUpdateUpdateTokenCounterProcessor

更新t_tfa_token表。

API POST /internal/token-proxy/soft-tokens/deactivate

用于Kill Switch。

API POST /internal/token-proxy/hard-tokens/suspend

用于Kill Switch。

API POST /v1/soft-tokens/otp/validate

校验soft token。

传参tokenSerialNum、tokenAppId、dfpHash、otp、challenge、challenge2。

步骤

同tfa/otp/verify,复用TokenValidationService.validatetOtp()。

SWK OTP: cust-auth → token-mgn/otp/verify → ms-crypto/verify-otp → New HSM

ms-crypto从请求体获取Token seed,用HSM解密后用token seed生成OTP,和请求体的OTP校验。

Batch JOB

每天下午执行,查询最近2天的tfa-softtoken数据,去重后给用户发消息。

主要业务流程

主要架构设计方案

主要数据库设计

遇到的问题和解决方案

优缺点和改进方案分析,业界对比


Attachments: