我正在尝试将Google登录集成到网站(PHP)登录页面中。
该网站的开发环境为localhost,但我已通过 / etc / hosts 文件将该网站映射到一个域。因此,目前,我正在通过 dev.test.com/mysite
之类的域访问该网站。我通过提供 dev.test.com 作为授权的JavaScript来源,为Google登录API生成了客户端ID 。
我可以成功实现从Google到我的网站的令牌ID。
然后使用Google推荐的 Google Client API库来验证令牌。
function googleLogin(){
$idToken = $_POST['idtoken'];
error_log($idToken);
$client = new Google_Client(['client_id' => getConfiguration('google_sign_in_api_key')]);
$payload = $client->verifyIdToken($idToken);
error_log('######### '. $payload);
if ($payload) {
$userid = $payload['sub'];
// If request specified a G Suite domain:
//$domain = $payload['hd'];
error_log('######### '. $payload);
} else {
// Invalid ID token
}
}
如果验证成功,请参考上面的功能 $ payload 不应为空。
我在Google Client API库内部类中放置了一些日志,并发现了以下异常。
DomainException:OpenSSL无法验证数据:错误:0906D06C:PEM 例程:PEM_read_bio:无起始行 /var/www/html/google-sign-in/vendor/firebase/php-jwt/src/JWT.php:229\nStack 跟踪:\ n#0 /var/www/html/google-sign-in/vendor/firebase/php-jwt/src/JWT.php(108): Firebase \ JWT \ JWT :: verify('eyJhbGciOiJSUzI ...', '* \ xF6 \ x04 \ xD8uq \ xA2 \ x91R \ xA5T \ x01A \ x96t ...','-----开始 PUBL ...','RS256')\ n#1 /var/www/html/google-sign-in/vendor/google/apiclient/src/Google/AccessToken/Verify.php(105): Firebase \ JWT \ JWT :: decode('eyJhbGciOiJSUzI ...','----- BEGIN PUBL ...', 阵列)\ n#2 /var/www/html/google-sign-in/vendor/google/apiclient/src/Google/Client.php(721): Google_AccessToken_Verify-> verifyIdToken('eyJhbGciOiJSUzI ...', '1022197204491-p ...')\ n#3 /var/www/html/google-sign-in/social-login-controller.php(21): Google_Client-> verifyIdToken('eyJhbGciOiJSUzI ...')\ n#4
与该问题有关的原因可能是什么?