Я хочу внедрить OpenId в G Suite api, чтобы подключить пользователя моего собственного php-приложения и использовать G Suite для управления пользователями.
Итак, я должен написать пример ниже:
в index.php у меня загружен autoload.php (с библиотекой google-api-php-client)
$client = new \Google_Client();
$client->setClientId(CLIENT_ID);
$client->setClientSecret(SECRET);
$client->setAuthConfig(ROOT_PATH.CLIENT_SECRET_JSON_FILE);
$client->setAccessType("offline");
$client->setIncludeGrantedScopes(true);
$client->setHostedDomain('mydomain.com');
$client->addScope(\Google_Service_Oauth2::USERINFO_PROFILE);
$redirect = $_SERVER['HTTP_HOST'];
$redirect = 'myapplication.mydomain.com';
$client->setRedirectUri('https://' . $redirect . '/oauth2callback.php');
$auth_url = $client->createAuthUrl();
header('Location: ' . filter_var($auth_url, FILTER_SANITIZE_URL));
oauth2callback.php
$client = new \Google_Client();
$client->setClientId(CLIENT_ID);
$client->setClientSecret(SECRET);
$client->setAuthConfig(ROOT_PATH.CLIENT_SECRET_JSON_FILE);
$client->setRedirectUri('https://myapplication.mydomain.com/oauth2callback.php');
$client->setAccessType("offline");
$client->setIncludeGrantedScopes(true);
$client->setHostedDomain('mydomain.com');
if (!isset($_GET['code'])) {
$auth_url = $client->createAuthUrl();
header('Location: ' . filter_var($auth_url, FILTER_SANITIZE_URL));
}
else {
$client->fetchAccessTokenWithAuthCode($_GET['code']);
$_SESSION['access_token'] = $client->getAccessToken();
$oauth = new \Google_Service_Oauth2($client);
var_dump($oauth->userinfo->get());
}
exit();
Все в порядке с этим примером, но я могу подключиться к моему приложению с другой учетной записью моего домена G Suite 🙁
Я не понимаю, где я должен настроить его, чтобы разрешить доступ только для моего домена G Suite в моем приложении.
Вы можете мне помочь ?
Спасибо
У меня есть начало ответа, это невозможно.
Но с возвратом api можно проверить значение hd (хост-домен), чтобы сравнить его с моим. https://developers.google.com/identity/sign-in/web/backend-auth
В моем случае я не возвращаю значение hd 🙁 и не знаю почему
Я нашел решение 🙂
Это просто. Объем должен быть «электронная почта». Если есть это значение, Gsuite автоматически возвращает значение в hd, чтобы проверить его.
После возврата я просто проверяю значение для сравнения с моим доменом Gsuite 🙂