Obtenez le même code à deux facteurs, comme j'ai reçu dans mon application Authy en JAVA


Je veux utiliser l'API de BitSkins.com, mais ils utilisent des codes à deux facteurs via Authy. Pour la demande sur BitSkins, j'ai besoin d'API_key et de code. Par lien: https://bitskins.com/api/, peut-être écrit à ce sujet, mais ils n'ont pas de solution pour JAVA.

https://bitskins.com/api/v1/get_account_balance/?api_key=I_KNOW_IT&code=**CODE_IN_PHONE_GENERATE_AUTOMATICALY**

Comment recevoir le même code CODE_IN_PHONE_GENERATE_AUTOMATICALY , comme je l'ai reçu dans mon application Authy sur mon téléphone?

Author: Steve Vinoski, 2016-08-25

1 answers

J'avais les mêmes problèmes que OP. Juste Googler des trucs pendant 5 minutes a résolu cela.

J'utilise cette petite API ici.

Ma mise en œuvre pourrait être un peu différente de vous car je le fais dans le cadre d'un très grand projet et mon entreprise finance cela.


Mise en œuvre du printemps

Dans notre application, le processus est automatisé et nous utilisons Spring Framework. J'ai créé un haricot qui n'est rien mais une Thread qui s'exécute indéfiniment et génère le code Authy (identique à celui indiqué sur le téléphone mobile).

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;
    }

}

Ensuite, vous créez un bean comme ceci:

<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>

Et passez-le partout où vous voulez le code à deux facteurs généré.


Mise en œuvre hors Printemps

Veuillez voirce petit exemple de l'auteur de l'API.

 1
Author: Jay, 2016-09-07 14:50:31