【问题标题】:Using google account for private website access使用谷歌帐户访问私人网站
【发布时间】:2015-07-09 19:54:03
【问题描述】:

目前,我正在为其开发的人使用谷歌文档来显示网站/文件。只能通过以特定域名结尾的谷歌帐户访问。例如 danny@webtest.com 如果它是一个 webtest google 帐户,那么它可以访问它。

现在我正在为他们创建一个未链接到谷歌的网站。但是,我仍然需要这个身份验证过程。

第一步 登录页面将是一个简单的“与谷歌帐户连接”

第二步 用户被重定向到登录到谷歌,如果他们已经登录然后转到下一步。

第三步电子邮件地址与我的数据库进行交叉检查,如果为该用户的行 ID 建立了会话,如果没有,则添加它。

我试图让这件事尽可能简单,但是我不知道在哪里或如何做第二步。

【问题讨论】:

  • 您似乎只是在尝试进行基本的 OAUTH2 身份验证,请查一下 :)
  • @Welshboy 我还没有尝试任何东西,因为我不知道从哪里开始。我搜索谷歌帐户身份验证的任何内容都只会让我进入谷歌登录等。但是,我知道我在做什么之后我只是无法弄清楚如何让信息返回,所以我可以用我的数据库交叉检查它.
  • 为问题添加了相关标签

标签: php google-oauth google-api-php-client google-login google-account


【解决方案1】:

看完@Izzy提到的维基百科介绍,你可以看看at google's Oauth2 introduction然后跳转到google's quick start sample app;它提供了一个使用 oauth 2.0 使用 google 帐户进行身份验证并获取用户数据的完整工作的注释 php 应用程序。

示例中的代码使用包 google-api-php-client 以及一个 js 库来将样板代码简化为更简单的 API 调用。对于客户端/前端,javascript调用如:

auth2.signIn().then(function(googleUser) {
  onSignInCallback(googleUser.getAuthResponse());
}, function(error) {
  alert(JSON.stringify(error, undefined, 2));
});

在服务器端,php端:

$code = $request->getContent();
// Exchange the OAuth 2.0 authorization code for user credentials.
$client->authenticate($code);
$token = json_decode($client->getAccessToken());

// You can read the Google user ID in the ID token.
// "sub" represents the ID token subscriber which in our case
// is the user ID. This sample does not use the user ID.
$attributes = $client->verifyIdToken($token->id_token, CLIENT_ID)
    ->getAttributes();
$gplus_id = $attributes["payload"]["sub"];

// Store the token in the session for later use.
$app['session']->set('token', json_encode($token));
$response = 'Successfully connected with token: ' . print_r($token, true);

请注意,请求电子邮件地址将需要进一步请求客户的许可(名为 Authorization scopes),如 in this SO question 所示:

$client->setScopes(array('https://www.googleapis.com/auth/userinfo.email','https://www.googleapis.com/auth/userinfo.profile'));

然后您可以使用任意数量的APIs that expose userinfo.email。其中之一,Google_Service_Oauth2,具有有用的公共方法userinfo

$oauth2Service = new Google_Service_Oauth2(...);
$userinfo = $oauth2Service->userinfo;

【讨论】:

    【解决方案2】:

    使用OAuth2。 Google 将其用于身份验证过程。

    开放授权的 OAuth 状态。 OAuth 是一种协议,旨在与 HTTP 一起使用,使访问令牌能够通过身份验证服务器发布给第三方客户端,并获得用户的批准。

    OAuth 开始被弃用,各大公司都开始使用 OAuth2 协议,它是 OAuth 的改进版本,但遗憾的是它不向后兼容。

    您可以在 PHP 中找到几个实现,例如 this one

    【讨论】:

    • 虽然你没有错,但不鼓励仅链接的答案。在你的答案中加入一些代码。您还应该讨论 OAuth2 是什么以及它对 OP 和未来读者的作用。见:How to write a good answer
    • @Izzy 谢谢你的回答,我一定会去看看的。
    猜你喜欢
    • 2013-08-15
    • 2012-04-01
    • 2015-05-26
    • 1970-01-01
    • 2017-08-31
    • 1970-01-01
    • 2019-05-15
    • 1970-01-01
    • 2017-05-13
    相关资源
    最近更新 更多