我已获得可访问Google Analytics帐户的凭据,
我希望使用Google Analytics核心报告API http://code.google.com/apis/analytics/docs/gdata/home.html
我找到了使用用户名/密码调用setUserCredentials的示例,但是看到这些注释不太安全/请求限制较低(并且在最新客户端中不存在).
此外,我似乎使用oauth的示例,但需要用户交互并授予用户谷歌帐户的访问权限.
但是,我希望运行一项不需要任何用户交互的服务,并连接到预定义的谷歌帐户(与查看它的用户无关).
然后,我可以将结果存储在数据库中,最终用户可以从数据库中查询结果.
我第一次登录时看到过有关使用AccessType = Offline的信息,然后返回访问令牌和refreshtoken. http://code.google.com/apis/accounts/docs/OAuth2WebServer.html#offline
但在我的示例中,最终用户永远不会登录到该应用程序.我可以有一个单独的管理应用程序获取刷新令牌,并将刷新令牌存储在配置/查找表中吗?然后,主应用程序可以使用从配置/查找表中提取的刷新令牌,并获取访问令牌以便能够查询Google Analytics帐户.
我正在寻找一个使用AccessType = Offline的C#示例,并分离获取刷新令牌并使用刷新令牌获取访问令牌以查询Google Analytics(分析)帐户.
我正在使用适用于 OAuth2 1.9 版的 Google API,并尝试每次将 AccessType 作为离线发送和 ApprovalPrompt 作为强制发送,以便我获得刷新令牌。我知道这里有很多关于这个主题的问题,有各种 api 版本和语言。但是,没有一个解决方案适用于新的 google 库。
我正在使用以下内容来获取流程:
private IAuthorizationCodeFlow GetAuthorizationCodeFlow()
{
var flow = new GoogleAuthorizationCodeFlow(
new GoogleAuthorizationCodeFlow.Initializer
{
ClientSecrets = new ClientSecrets
{
ClientId =
"***",
ClientSecret = "***"
},
Scopes = new string[]
{
CalendarService.Scope.Calendar,
PlusService.Scope.UserinfoProfile,
PlusService.Scope.UserinfoEmail,
PlusService.Scope.PlusLogin,
"https://www.googleapis.com/auth/contacts.readonly"
}
});
return flow;
}
Run Code Online (Sandbox Code Playgroud)
然后使用以下代码获取令牌:
var token = flow.ExchangeCodeForTokenAsync("me", code,
uri.Substring(0, uri.IndexOf("?")), CancellationToken.None).Result;
Run Code Online (Sandbox Code Playgroud)
这是我每次(不仅仅是第一次)都需要刷新令牌的地方,所以我想设置 AccessType 和 ApprovalPrompt。
我正在根据这个Google示例代码开发一个Asp.NET MVC5应用程序.
我希望应用程序经过身份验证并由用户创建一个accessstoken(配置阶段),之后我需要能够使用刷新令牌调用Google APis(在我的情况下为Directory API)(无需用户干预,例如"离线").
控制器:
public async Task<ActionResult> IndexAsync(CancellationToken cancellationToken)
{
var result = await new AuthorizationCodeMvcApp(this, new AppFlowMetadata()).
AuthorizeAsync(cancellationToken);
if (result.Credential != null)
{
var service = new Google.Apis.Admin.Directory.directory_v1.DirectoryService(new BaseClientService.Initializer
{
HttpClientInitializer = result.Credential,
ApplicationName = "My Application"
});
return View();
}
else
{
return new RedirectResult(result.RedirectUri);
}
}
Run Code Online (Sandbox Code Playgroud)
FlowMetadata实现.(我使用FiledataStore稍加修改(GoogleFileDataStore))
public class AppFlowMetadata : FlowMetadata
{
//Move to settings
static readonly string clientId = "xxxccnvofsdfsfoj.apps.googleusercontent.com";
static readonly string clientsecret = "xxxxxxxxxxLvtC6Qbqpp4x_";
static readonly string …Run Code Online (Sandbox Code Playgroud)