gpt4 book ai didi

php - Google 2 因素身份验证二维码问题

转载 作者:行者123 更新时间:2023-12-04 13:01:50 25 4
gpt4 key购买 nike

我正在尝试创建一个 Google 2 因素授权,只是作为一个实验,并非出于任何实际原因。

我使用的代码来自:here

我通过一个有两个参数 $username 和 $secret 的函数构建了一个二维码 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() 生成

但是,当我加载请求二维码的页面时,Google 会提示“您的客户发出了格式错误或非法的请求”。这就是烦人的地方。如果我单击地址栏并再次发送请求,它将加载提供正确 OTP(一次性密码)的 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" />';
}
?>

我想我可能对此进行改进的唯一方法是将图像实际保存到服务器并保留本地副本,直到重新生成 key 或其他东西。但那是如果我要在适当的环境中实现它! :]

感谢@Brad 的帮助!

关于php - Google 2 因素身份验证二维码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11074191/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com