【问题标题】:How to implement google API Incremental authorization in PHP?如何在 PHP 中实现 google API 增量授权?
【发布时间】:2021-04-23 11:27:29
【问题描述】:

我已经使用 Google 实现了 oauth2,使用 PHP 中的 googleapis/google-api-php-client API 客户端,并使其与登录范围“配置文件”一起使用。我想使用增量授权,这样在用户登录一段时间后,我可以添加 YouTube 范围“https://www.googleapis.com/auth/youtube.force-ssl”,这样我就可以收集有关 YouTube 创作者 cmets 的信息。我能找到的每个示例都只是说您需要添加以下单行代码:

$client->setIncludeGrantedScopes(true);

我已经这样做了,但是在我验证了用户的登录身份之后我该怎么办,我现在想要实际请求 YouTube 范围?我是否只是通过额外的 oauth 请求运行它们?如果是这样,我如何将登录名与 youtube 范围相关联,或者是否有不同的程序?

我可以在初始 oauth 登录期间同时请求配置文件和 YouTube 范围,没有问题,但我希望用户使用配置文件范围登录,然后再添加 YouTube 范围。主要原因是即使我只是使用它来读取 cmets,范围本身也几乎使网站能够执行与 youtube 相关的任何事情,而且我不想在用户最初登录并收到提示时吓跑他们批准如此高级别的范围。

如果有人能指点我或向我展示这个过程的 PHP 完整示例,我将非常感激,因为我已经为此苦苦挣扎了一段时间。

谢谢!

尼克

【问题讨论】:

    标签: php google-api-php-client google-oauth scopes


    【解决方案1】:

    每次请求新范围时,您都需要执行 OAuth 请求。因此,需要不止一个请求。您可以使用单个文件来处理所有身份验证请求。像这样的东西应该可以工作......

    //set CSRF (Cross Site Request Forgery) token
    if(!isset($_SESSION["state"])){
        $state = sha1(openssl_random_pseudo_bytes(1024)); 
        $_SESSION["state"] = $state;    
    } else { $state = $_SESSION["state"]; }
    
    //include Google PHP client library
    require_once "../../ggl_lib/vendor/autoload.php"; 
    
    //create client object to request authorization
    $client = new Google_Client(); 
    $client->setAuthConfig("path_to_key.json");
    $scopes = array("profile", "email");
    
    if ( isset($_GET["request"]) && ($_GET["request"] == "youtubeAccess") ) {   // configure authentication request to allow access to youtube info
    
        array_push($scopes, "https://www.googleapis.com/auth/youtube.force-ssl"); //this scope is for the youtube info
        $client->setIncludeGrantedScopes(true);
        $client->setRedirectUri("path_to_redirect_uri");                
        $client->setAccessType("offline");
        $client->setApprovalPrompt("force");    
    
    }  else { // configure authentication to get user basic information
    
        $client->setApprovalPrompt("force");
        $client->setRedirectUri("path_to_redirect_uri");
    
    }
    
    $client->setScopes($scopes); // set scopes
    $client->setState($state); // set CSRF Token
    
    //Request authorization
    if (!isset($_GET['code'])) {    
        $auth_url = $client->createAuthUrl();
        header('Location: ' . filter_var($auth_url, FILTER_SANITIZE_URL));
    }
    

    上述方法发送一个url参数request=youtubeAccess表示它需要获取youtube范围。如果参数不存在,它只执行基本授权。如果您将令牌保存到数据库,则每次执行授权时,请确保将令牌保存到数据库。这就是我处理增量授权的方式。

    【讨论】:

      【解决方案2】:

      我一整天都在与 PHP 的增量作用域作斗争。主要是刷新过期的访问令牌。每次访问令牌过期时,我都会使用刷新令牌来获取新的访问令牌 - 新令牌没有新的范围。我最初的注册没有增量范围。

      修复:在您的个人 google 帐户中的“具有帐户访问权限的第三方应用程序”下,只需完全删除权限并重新注册到您的应用程序即可。当您重新注册时,“增量范围”将从头开始设置。

      【讨论】:

      • 谢谢!有用的评论,因为 Google 文档中没有很好地解释增量范围!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-20
      • 2020-09-23
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多