[英]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.