我已在Google中使用PHP中的googleapis / google-api-php-client API客户端实现了oauth2,并使其与范围“配置文件”中的登录一起使用。我想使用增量授权,这样在用户登录后的一段时间内,我可以添加YouTube范围“ https://www.googleapis.com/auth/youtube.force-ssl”,以便收集有关YouTube创建者评论的信息。我只能找到的每个示例都说您需要添加以下单行代码:
$client->setIncludeGrantedScopes(true);
我已经完成了,但是在以此身份验证用户的登录身份之后,我现在想实际请求YouTube范围该怎么办?我是否只是通过其他oauth请求运行它们?如果是这样,我如何将登录名与youtube范围链接?或者有其他步骤?
在最初的oauth登录期间,我可以请求配置文件和YouTube范围,而不会出现问题,但是我希望用户使用配置文件范围登录,然后再添加YouTube范围。主要原因是,即使我只是用它来阅读评论,范围本身也使该网站能够执行与youtube有关的任何操作,并且我不想在用户最初登录并受到提示时吓e用户批准这么高的范围。
如果有人可以用PHP指向我或向我展示此过程的完整示例,我将不胜感激,因为我一直为此苦苦挣扎。
谢谢!
尼克
答案 0 :(得分:0)
每次请求新范围时,都需要执行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范围。如果不存在该参数,则仅执行基本授权。如果要将令牌保存到数据库,则每次执行授权时,请确保将令牌保存到数据库。这就是我处理增量授权的方式。
答案 1 :(得分:0)
我一整天都在用 PHP 与增量作用域作斗争。主要用于刷新过期的访问令牌。每次访问令牌过期时,我都会使用刷新令牌来获取新的访问令牌 - 新令牌没有新的范围。我最初的注册没有增量范围。
修复:在“具有帐户访问权限的第三方应用程序”下的您的个人谷歌帐户中,只需完全删除权限并重新注册到您的应用程序。当您重新注册时,“增量范围”将从头开始设置。