1

BitSkins.com の API を使いたいのですが、Authy を介して 2 要素コードを使用しています。BitSkins でのリクエストには、API_key とコードが必要です。リンク: https://bitskins.com/api/、おそらくそれについて書いていますが、JAVA のソリューションはありません。

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

電話の Authy アプリケーションで受け取ったのと同じコードCODE_IN_PHONE_GENERATE_AUTOMATICALYを受け取るにはどうすればよいですか?

4

1 に答える 1

1

OPと同じ問題を抱えていました。5分間グーグルで検索するだけで解決しました。

ここでは、この小さな APIを使用しています。

私は非常に大きなプロジェクトの一部としてこれを行っており、私の会社はこれに資金を提供しているため、私の実装はあなたとはかなり異なるかもしれません.


春の実装

私たちのアプリケーションでは、プロセスは自動化されており、Spring Framework を使用しています。無期限に実行され、Authy コードを生成する Bean を作成しましたThread(携帯電話に表示されるものと同じ)。

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>

そして、生成された 2 要素コードが必要な場所にそれを渡します。


Spring 以外の実装

API 作成者によるこの小さな例を参照してください。

于 2016-09-07T14:50:31.463 に答える