Я пытаюсь заставить API Google Identity Toolkit работать для приложения на основе PHP.
Я следую краткому руководству от Google, доступному здесь:
https://developers.google.com/identity/toolkit/web/quickstart/php
Я точно следовал за шагами (и проверил и дважды проверил).
Кнопка входа появляется на index.php
стр. Нажав на это перенаправляет на widget.php
стр. Я могу выбрать, в какую учетную запись я хочу войти, а затем, когда вернусь на страницу успешного входа (index.php
еще раз) я получаю следующее сообщение об ошибке:
Фатальная ошибка: Uncaught исключение «Google_Auth_Exception» с сообщением «Ошибка обновления токена OAuth2, сообщение:« {«error»:
«invalid_client», «error_description»: «Клиент OAuth был
недействительным.» }’
Я пытался воссоздать клиент OAuth в консоли разработчика Google. Некоторые результаты поиска, упомянутые для проверки полей электронной почты и имени проекта, были заполнены на экране OAuth Consent, и все это я сделал.
Любая помощь & Совет был бы очень признателен.
Примечание. Я использую «Google» только из доступных поставщиков в настройках API Identity Toolkit.
Моя страница index.php:
<!DOCTYPE html>
<html>
<head>
<!-- 1: Load the Google Identity Toolkit helpers -->
<?php
set_include_path(get_include_path() . PATH_SEPARATOR . __DIR__ .'/vendor/google/apiclient/src');
require_once __DIR__ . '/vendor/autoload.php';
$gitkitClient = Gitkit_Client::createFromFile(dirname(__FILE__) . '/gitkit-server-config.json');
$gitkitUser = $gitkitClient->getUserInRequest();
?>
<!-- End modification 1 -->
<script type="text/javascript" src="//www.gstatic.com/authtoolkit/js/gitkit.js"></script>
<link type=text/css rel=stylesheet href="//www.gstatic.com/authtoolkit/css/gitkit.css" />
<script type=text/javascript>
window.google.identitytoolkit.signInButton(
'#navbar',
{
widgetUrl: "/gitkit",
signOutUrl: "/index"}
);
</script>
</head>
<body>
<div id="navbar"></div>
<!-- 2: Print the user information if a signed in user is present -->
<p>
<?php if ($gitkitUser) { ?>
Welcome back!<br><br>
Email: <?= $gitkitUser->getEmail() ?><br>
Id: <?= $gitkitUser->getUserId() ?><br>
Name: <?= $gitkitUser->getDisplayName() ?><br>
Identity provider: <?= $gitkitUser->getProviderId() ?><br>
<?php } else { ?>
You are not logged in yet.
<?php } ?>
</p>
<!-- End modification 2 -->
</body>
</html>
Моя страница gitkit.php:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<!-- Copy and paste here the client configuration from Developer Console into the config variable -->
<script type="text/javascript" src="//www.gstatic.com/authtoolkit/js/gitkit.js"></script>
<link type="text/css" rel="stylesheet" href="//www.gstatic.com/authtoolkit/css/gitkit.css" />
<script type="text/javascript">
var config =
{
"widgetUrl": "http://local.myfakedomain.com/gitkit",
"signInSuccessUrl": "/",
"signOutUrl": "/",
"oobActionUrl": "/",
"apiKey": "<my-api-key-here>",
"siteName": "this site",
"signInOptions": ["password","google"]
}
;
// The HTTP POST body should be escaped by the server to prevent XSS
window.google.identitytoolkit.start(
'#gitkitWidgetDiv', // accepts any CSS selector
config,
JSON.parse('<?php echo json_encode(file_get_contents("php://input")); ?>')
);
</script>
<!-- End modification -->
</head>
<body>
<!-- Include the sign in page widget with the matching 'gitkitWidgetDiv' id -->
<div id="gitkitWidgetDiv"></div>
<!-- End identity toolkit widget -->
</body>
</html>
мой файл gitkit-server-config.json:
{
"clientId": "<my-client-id-here>",
"projectId": "<my-project-id-here>",
"serviceAccountEmail": "<my-serviceAccountEmail-here>",
"serviceAccountPrivateKeyFile": "<my-p12-KeyFile-location-here>",
"widgetUrl": "http://local.myfakedomain.com/gitkit",
"cookieName": "gtoken"}
У меня была та же проблема, которую я решил, вставив «правильный» адрес электронной почты учетной записи службы в код конфигурации сервера:
{
"clientId": "<my-client-id-here>",
"projectId": "<my-project-id-here>",
"serviceAccountEmail": "<Correct-serviceAccountEmail-here>",
"serviceAccountPrivateKeyFile": "<my-p12-KeyFile-location-here>",
"widgetUrl": "http://local.myfakedomain.com/gitkit",
"cookieName": "gtoken"}
Хитрость в том, что serviceAccountEmail не ваш адрес электронной почты Google, чтобы найти правильный адрес электронной почты, перейдите на полномочия затем под Сервисные ключи учетной записи щелчок Управление учетными записями служб перейдите по ссылке справа, перейдите к используемому сервису и отметьте поле электронной почты. Письмо длинное и формат будет примерно таким [email protected]
В вашем файле gitkit-server-config.json serviceAccountEmail не должен быть пустым. Вы можете скопировать электронную почту учетной записи службы со страницы настроек проекта в консоли разработчика Google.
Помимо электронной почты учетной записи службы (что-то вроде «[email protected]», идентификатор проекта вызвал у меня проблемы.
Решение, которое я нашел, было, если Google сказал, что ваш projectId — «example.com:appname», измените его на «appname»