获取相同的双因素代码,就像我在 JAVA 的 App Authy 中收到的一样
Get same two-factor code, like I received in my App Authy in JAVA
我想使用 BitSkins.com 的 API,但他们通过 Authy 使用双因素代码。对于 BitSkins 的请求,我需要 API_key 和代码。
通过 link:https://bitskins.com/api/,也许写过它,但他们没有针对 JAVA 的解决方案。
https://bitskins.com/api/v1/get_account_balance/?api_key=I_KNOW_IT&code=**CODE_IN_PHONE_GENERATE_AUTOMATICALY**
如何接收相同的代码 CODE_IN_PHONE_GENERATE_AUTOMATICALY,就像我在 phone 上的 Authy 应用程序中收到的一样?
我遇到了与 OP 相同的问题。只需谷歌搜索 5 分钟即可解决问题。
我这里用的是this小API
我的实现可能与您有很大不同,因为我是作为一个非常大的项目的一部分来做的,并且 my company 正在为此提供资金。
Spring 实施
在我们的应用程序中,该过程是自动化的,我们使用的是 Spring 框架。我创建了一个 bean,它不过是一个无限期运行并生成 Authy 代码的 Thread
(与移动 phone 中显示的相同)。
import org.apache.log4j.Logger;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import com.sarvika.commonslib.util.StringUtil;
import com.j256.totp.TwoFactorAuthUtil;
public class Authy2FactorThreadBean extends Thread implements ApplicationContextAware {
private static final Logger logger = Logger.getLogger(Authy2FactorThreadBean.class);
private String base32Secret;
private String keyId;
private String qrCodeImageUrl;
private String code;
@Override
public void run() {
try {
TwoFactorAuthUtil twoFactorAuthUtil = new TwoFactorAuthUtil();
qrCodeImageUrl = twoFactorAuthUtil.qrImageUrl(keyId, base32Secret);
code = twoFactorAuthUtil.generateCurrentNumber(base32Secret);
while (true) {
code = twoFactorAuthUtil.generateCurrentNumber(base32Secret);
Thread.sleep(1000);
}
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
}
}
@Override
public void setApplicationContext(ApplicationContext context)
throws BeansException {
if (StringUtil.isEmpty(base32Secret) || StringUtil.isEmpty(keyId)) {
logger.warn("Base32 Secret or Key ID not provided. 2Factor Codes will not be generated!!!!!");
return;
}
logger.info("Starting 2Factor Generation Thread...");
start();
}
public String getBase32Secret() {
return base32Secret;
}
public void setBase32Secret(String base32Secret) {
this.base32Secret = base32Secret;
}
public String getKeyId() {
return keyId;
}
public void setKeyId(String keyId) {
this.keyId = keyId;
}
public String getQrCodeImageUrl() {
return qrCodeImageUrl;
}
public void setQrCodeImageUrl(String qrCodeImageUrl) {
this.qrCodeImageUrl = qrCodeImageUrl;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
}
然后像这样创建一个 bean:
<bean id="authy2FactorThreadBean" class="Authy2FactorThreadBean">
<!-- twofactor.secret is the Secret shown by the Bitskins when you are authorizing your phone -->
<property name="base32Secret" value="${twofactor.secret}"/>
<!-- twofactor.key is the name of the key which can be displayed by the authenticator program -->
<property name="keyId" value="${twofactor.key}"/>
</bean>
并将它传递到任何你想要生成的双因素代码的地方。
非Spring实施
请参阅 API 作者的 this 小示例。
我想使用 BitSkins.com 的 API,但他们通过 Authy 使用双因素代码。对于 BitSkins 的请求,我需要 API_key 和代码。 通过 link:https://bitskins.com/api/,也许写过它,但他们没有针对 JAVA 的解决方案。
https://bitskins.com/api/v1/get_account_balance/?api_key=I_KNOW_IT&code=**CODE_IN_PHONE_GENERATE_AUTOMATICALY**
如何接收相同的代码 CODE_IN_PHONE_GENERATE_AUTOMATICALY,就像我在 phone 上的 Authy 应用程序中收到的一样?
我遇到了与 OP 相同的问题。只需谷歌搜索 5 分钟即可解决问题。
我这里用的是this小API
我的实现可能与您有很大不同,因为我是作为一个非常大的项目的一部分来做的,并且 my company 正在为此提供资金。
Spring 实施
在我们的应用程序中,该过程是自动化的,我们使用的是 Spring 框架。我创建了一个 bean,它不过是一个无限期运行并生成 Authy 代码的 Thread
(与移动 phone 中显示的相同)。
import org.apache.log4j.Logger;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import com.sarvika.commonslib.util.StringUtil;
import com.j256.totp.TwoFactorAuthUtil;
public class Authy2FactorThreadBean extends Thread implements ApplicationContextAware {
private static final Logger logger = Logger.getLogger(Authy2FactorThreadBean.class);
private String base32Secret;
private String keyId;
private String qrCodeImageUrl;
private String code;
@Override
public void run() {
try {
TwoFactorAuthUtil twoFactorAuthUtil = new TwoFactorAuthUtil();
qrCodeImageUrl = twoFactorAuthUtil.qrImageUrl(keyId, base32Secret);
code = twoFactorAuthUtil.generateCurrentNumber(base32Secret);
while (true) {
code = twoFactorAuthUtil.generateCurrentNumber(base32Secret);
Thread.sleep(1000);
}
} catch (Exception ex) {
logger.error(ex.getMessage(), ex);
}
}
@Override
public void setApplicationContext(ApplicationContext context)
throws BeansException {
if (StringUtil.isEmpty(base32Secret) || StringUtil.isEmpty(keyId)) {
logger.warn("Base32 Secret or Key ID not provided. 2Factor Codes will not be generated!!!!!");
return;
}
logger.info("Starting 2Factor Generation Thread...");
start();
}
public String getBase32Secret() {
return base32Secret;
}
public void setBase32Secret(String base32Secret) {
this.base32Secret = base32Secret;
}
public String getKeyId() {
return keyId;
}
public void setKeyId(String keyId) {
this.keyId = keyId;
}
public String getQrCodeImageUrl() {
return qrCodeImageUrl;
}
public void setQrCodeImageUrl(String qrCodeImageUrl) {
this.qrCodeImageUrl = qrCodeImageUrl;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
}
然后像这样创建一个 bean:
<bean id="authy2FactorThreadBean" class="Authy2FactorThreadBean">
<!-- twofactor.secret is the Secret shown by the Bitskins when you are authorizing your phone -->
<property name="base32Secret" value="${twofactor.secret}"/>
<!-- twofactor.key is the name of the key which can be displayed by the authenticator program -->
<property name="keyId" value="${twofactor.key}"/>
</bean>
并将它传递到任何你想要生成的双因素代码的地方。
非Spring实施
请参阅 API 作者的 this 小示例。