首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取相同的双因素代码,就像我在我的Authy在JAVA中收到的一样

获取相同的双因素代码,就像我在我的Authy在JAVA中收到的一样
EN

Stack Overflow用户
提问于 2016-08-25 17:57:16
回答 1查看 344关注 0票数 1

我想使用BitSkins.com的API,但是他们通过Authy使用双因素代码.对于BitSkins上的请求,我需要API_key和代码。通过链接:https://bitskins.com/api/,也许已经写过了,但是他们还没有针对JAVA的解决方案。

代码语言:javascript
复制
https://bitskins.com/api/v1/get_account_balance/?api_key=I_KNOW_IT&code=**CODE_IN_PHONE_GENERATE_AUTOMATICALY**

如何接收与我在手机上的语音应用程序中收到的代码相同的CODE_IN_PHONE_GENERATE_AUTOMATICALY,代码?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-07 14:50:31

我和OP有同样的问题。只要在谷歌上搜索5分钟就能解决这个问题。

这里我使用的是小API。

我的实现可能与您有很大的不同,因为我是作为一个非常大的项目的一部分这样做的,而我的公司正在资助这个项目。

春季实施

在我们的应用程序中,流程是自动化的,我们使用的是Spring框架。我已经创建了一个bean,它只不过是一个Thread,它无限期地运行并生成Authy代码(与手机中显示的相同)。

代码语言:javascript
复制
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:

代码语言:javascript
复制
<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>

把它传递到你想要的任何地方,生成的双因素代码。

非春季实现

请参阅API作者的小示例。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39151880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档