我目前仍然在一个项目中使用GAPI,该项目通过需要授权的端点访问YouTube Data API。
简单地说,这是当前的实现:
- 用户点击"使用google登录";在前端
- 用户可以选择他的YouTube频道(这可以是主帐户或任何其他帐户,其中用户是所有者,例如品牌帐户)
- Google返回代码,代码被发送到后端,后端交换代码的刷新令牌和刷新令牌存储为特定的YouTube帐户。
从那时起,可以对该帐户发出授权请求。现在GAPI已经被弃用取代了Google Identity,它将身份验证与授权分开了。
我的问题是:我只能选择主谷歌帐户在认证和授权。我无法看到我拥有的品牌账号或其他渠道。但是,我需要能够选择任何YouTube帐户。
使用GAPI,帐户选择页面显示"选择帐户或品牌帐户"。-使用谷歌身份服务,只需"选择一个帐户"。所以现在我的理论是,我可能能够检索和存储主谷歌帐户的刷新令牌,然后访问连接到它的所有YouTube帐户。
- 正确吗?
如果是:
- 当Google想让登录更精细时,不能只选择有限数量的YouTube帐户似乎是一种降级。有什么办法可以抵消这一点吗?
- 我如何知道哪些YouTube帐户链接到主要的谷歌帐户?当我不知道是哪些帐户时,访问所有帐户并没有帮助。
如果不是:我还可以如何选择一个特定的YouTube帐户?
编辑:
关于前端的实现:我使用React与@react-oauth/google。您可以在这里找到托管的预览,可以从这里克隆。
基本上,这个想法是让用户使用ID令牌流登录到应用程序,该流对应于预览页面左侧的按钮。然后,登录用户可以对他们的任何YouTube帐户授予权限,这将对应于"授权"。按钮在右边。
要重现该问题,请使用您的主Google帐户创建第二个YouTube帐户。我们的目标是找到任何方法来授予使用YouTube Data API查询该帐户的权限。
当尝试构建一个最小的示例时,我决定放弃react和第三方库,使用普通的gsi库:
<!DOCTYPE html>
<html>
<head>
<script
src="https://accounts.google.com/gsi/client"
onload="initClient()"
async
defer
></script>
</head>
<body>
<script>
var client;
var access_token;
function initClient() {
client = google.accounts.oauth2.initTokenClient({
client_id:
"<your-client-id>",
scope: "https://www.googleapis.com/auth/youtube.readonly",
callback: (tokenResponse) => {
access_token = tokenResponse.access_token;
},
});
}
function getToken() {
client.requestAccessToken();
}
function revokeToken() {
google.accounts.oauth2.revoke(access_token, () => {
console.log("access token revoked");
});
}
</script>
<h1>Google Identity Services Authorization Token model</h1>
<button onclick="getToken();">Get access token</button><br/><br />
<button onclick="revokeToken();">Revoke token</button>
</body>
</html>
当我删除YouTube范围时,我无法看到YouTube帐户。然后我用@react-oauth/google检查了我所做的请求,结果发现它没有包含它所做请求中的范围。这似乎不是@react-oauth/google的问题,但在我的应用程序。
概要:
- 如果您想查看YouTube帐户,请确保通过YouTube作用域
- 检查在开发工具 中实际发出的请求