簡體   English   中英

Google 2 Factor Authentication QR Code問題

[英]Google 2 Factor Authentication QR Code Issues

我出於任何實際原因,都嘗試創建Google 2因子授權作為實驗。

我使用的是從提供的代碼: 這里

我通過具有兩個參數$ username和$ secret的函數構建QR Code URL

$qrcode_url = "https://www.google.com/chart?chs=200x200&chld=M|0&cht=qr&chl=otpauth://totp/{$username}%3Fsecret%3D{$secret}";

這樣可以正確構建一個URL。

$username參數是正在登錄的用戶。

$secret參數由Google2FA::generate_secret_key()

但是,當我加載要求QR碼的頁面時,Google宣稱它為“您的客戶發出了格式錯誤或非法的請求”。 這是令人討厭的地方。 如果我單擊地址欄並再次發送請求,它將加載提供正確OTP(一次性密碼)的QR碼。 然后,如果我重新加載上面帶有QR碼的頁面,則此頁面也將正確加載。

關於導致此問題的原因有什么想法? 我在本地XAMPP上運行它與它無關,不是嗎?

提前致謝! :]

編輯:只是讓您知道,我不認為這是一個緩存問題,因為我已經清除了它,但仍然很煩人。

我似乎已通過混合使用cURL和其他URL來解決此問題,以訪問圖像。

這是我完整的解決方案:

<?php
public static function get_qr_code_url( $username, $secret )
{
    $h              =   100;
    return  'http://chart.apis.google.com/chart?chs=' . $h . 'x' . $h . 
            '&chld=M|0&cht=qr&chl=' . urlencode( 'otpauth://totp/' . $username . '@' . $_SERVER['HTTP_HOST'] . '?secret=' . $secret );
}

public static function get_qr_code( $username, $secret )
{
    if( FALSE === $secret )
    {
        return FALSE;
    }
    $url        =   self::get_qr_code_url( $username, $secret );
    $curl_handle    =   curl_init();
    $headers    =   array( 'Expect:' ); 
    $options    =   array(
        CURLOPT_URL     =>  $url,
        CURLOPT_CONNECTTIMEOUT  =>  2,
        CURLOPT_RETURNTRANSFER  =>  1,
        CURLOPT_USERAGENT   =>  'My-Google-Auth',
        CURLOPT_HTTPHEADER  =>  $headers
    );
    curl_setopt_array( $curl_handle, $options );

    $query  =   curl_exec( $curl_handle );
    curl_close( $curl_handle );

    $base_64=   chunk_split( base64_encode( $query ) );

    return '<img class="google_qrcode" src="data:image/gif;base64,' . $base_64 . '" alt="QR Code" />';
}
    ?>

我猜想,我可能會對此進行改進的唯一方法是將映像實際保存到服務器,並保留本地副本,直到重新生成密鑰為止。 但這就是我是否要在適當的環境中實現這一目標! :]

感謝@Brad的幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM