如何以编程方式向Google进行身份验证?现在的ClientLogin(https://developers.google.com/accounts/docs/AuthForInstalledApps)已过时,我们如何能够执行编程认证,以与谷歌的OAuth2?
使用ClientLogin,我们可以 使用电子邮件和密码参数向https://www.google.com/accounts/ClientLogin发送帖子, 并获取身份验证令牌.
使用OAuth2我找不到解决方案!
#我的应用程序是一个java后台进程.我看到,点击此链接:developers.google.com/accounts/docs/OAuth2InstalledApp#refresh,如何使用刷新的令牌获取新的访问令牌.
问题是,当我有一个新的有效访问令牌时,我找不到一个关于如何实例化Analytics对象(例如)来执行查询的java示例
这是我的代码在调用"execute()"时返回401无效凭据:
public class Test {
static final String client_id = "MY_CLIENT_ID";
static final String client_secret = "MY_SECRET";
static final String appName = "MY_APP";
private static final HttpTransport HTTP_TRANSPORT = new NetHttpTransport();
private static final JsonFactory JSON_FACTORY = new JacksonFactory();
static String access_token = "xxxx";
static String refreshToken = "yyyyy";
public static void main (String args[]){
try {
GoogleCredential credential =
new GoogleCredential.Builder()
.setTransport(HTTP_TRANSPORT)
.setJsonFactory(JSON_FACTORY)
.setClientSecrets(client_id, client_secret).build();
credential.setAccessToken(access_token);
credential.setRefreshToken(refreshToken); …Run Code Online (Sandbox Code Playgroud) 所以,我有一个有效的渠道OAuth令牌.令牌过期后,它会自动刷新.此令牌适用于请求gdata.youtube.com,但由于某种原因被拒绝www.googleapis.com/youtube/analytics/v1/reports.
用于获取令牌的范围是 https://gdata.youtube.com https://www.googleapis.com/auth/yt-analytics.readonly https://www.googleapis.com/auth/youtubepartner
这适用于其他渠道,但不适用于其他渠道.
GET www.googleapis.com/youtube/analytics/v1/reports
PARAMS
?metrics=views
&ids=channel==...
&start-date=...
&end-date=...
HEADER
Authorization: Bearer ...
RESPONSE
{
"error": {
"errors": [
{
"domain": "global",
"reason": "forbidden",
"message": "Forbidden"
}
],
"code": 403,
"message": "Forbidden"
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:应该注意的是,当您调用www.googleapis.com/youtube/analytics/v1/reports范围不足时,您会收到以下错误:
{domain:global, reason:insufficientPermissions, message:Insufficient Permission}
Run Code Online (Sandbox Code Playgroud)
这是与403禁止的完全不同的错误.
我的应用遵循服务器端授权流程,如https://developers.google.com/youtube/v3/guides/auth/server-side-web-apps中所述.我强迫prompt=select_account.
在最基本的情况下,在"步骤3:Google提示用户同意"中,用户会看到一个屏幕,其中包含一个或多个名为"选择帐户"的帐户.如果用户选择的帐户只有一个与之关联的通道,则流程将直接进入"步骤4:处理OAuth 2.0服务器响应".
如果用户有多个与该帐户关联的频道,则该用户可能会看到另一个标题为"选择您的帐户或品牌帐户"的屏幕.
就我个人而言,我有两个Google帐户:个人帐户和工作帐户,我在"选择帐户"屏幕上看到它们.如果我选择我的个人帐户,我会直接访问该应用程序.如果我选择了我的工作帐户,我会看到其他屏幕,我可以选择我的"个人"工作YouTube频道/帐户或公司范围的共享频道/帐户.我总共可以管理和访问3个YouTube频道/帐户.
问题是某些用户看不到"选择您的帐户或品牌帐户"中列出的所有频道.如果用户同时登录YouTube,他们仍然可以通过YouTube上的右上角帐户选择器访问所有频道,但他们根本无法在选择器中看到这些频道.我曾尝试channels.list在这些情况下调用YT API ,但它不会返回丢失的频道,只返回用户从选择器中选择的频道.
感觉我在这里遗漏了一些明显的东西,但由于我对OAuth流程没有多少控制权,我不确定如何解决这个问题.这对我来说是一个问题,还是我只需要指导用户在他们的最后做点什么?
可能相关的事情: