2014-08-28 77 views
0

如何设置一个允许误差范围的定时到期余地,例如:1分钟?一次性密码(OTP)过期余地

目前,这是我的粗略实现,我必须添加其他您在服务器接收邮件00:01:00和客户端发送00:00:59情况下,最后一分钟;

/**Client**/ 
int minutesNow = timeInSeconds()/60; 
String mySignature = genAlgo(minutesNow, firstPassword); 
sendToServer(mySignature); 

/**Server**/ 
int minutesNow = timeInSeconds()/60; 
String userPassword = getUserPassword(); 
boolean result = verifySig(mySignature, userPassword, minutesNow); 
if(!result) 
{ 
    result = verifySig(mySignature, userPassword, --minutesNow); 
} 

这个问题的 Password Reset Link Expiry的阐述......我需要更多的细节到时候+/-

回答

1

你只需要在做服务器端几项检查:当前分钟,分钟前并在未来分钟。

它会是这个样子:

/**Server**/ 
int validationWindow = 1; // in minutes 
int minutesNow = timeInSeconds()/60; 
String userPassword = getUserPassword(); 

int timeToCheck = minutesNow - validationWindow; 
boolean result = verifySig(mySignature, userPassword, timeToCheck); 
while (!result && timeToCheck <= minutesNow + validationWinwow) { 
    result = verifySig(mySignature, userPassword, ++timeToCheck); 
}