用于个人 Web 应用程序的 G Suite OpenId 连接

G Suite OpenId connection for personnal web application

我想实现 G Suite api 的 OpenId 以连接我自己的 php 应用程序的用户并使用用户的 G Suite 管理。

所以我写了下面的例子:

在 index.php 我有加载 autoload.php (使用 google-api-php-客户端库)

$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 的 return,可以检查值 hd(托管域)以将其与我的进行比较。 https://developers.google.com/identity/sign-in/web/backend-auth

就我而言,我没有 return 高清值 :-( 而且我不知道为什么

我找到了解决方案:-) 这很简单。范围必须是 "email"。如果有这个值,Gsuite return 会自动在 hd 中检查它的值。 在 return 之后,我只是测试该值以与我的 Gsuite 域进行比较:-)