相关疑难解决方法(0)

服务帐户Google Analytics OAuth AccessType =离线C#

我已获得可访问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(分析)帐户.

c# asp.net oauth google-analytics-api

11
推荐指数
1
解决办法
9027
查看次数

如何在 C# 中的 Google.Apis.Core 1.9 中将 AccessType 设置为离线

我正在使用适用于 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。

c# google-api oauth-2.0 google-api-dotnet-client

3
推荐指数
1
解决办法
2698
查看次数

OAuth 2 Google API刷新令牌为空

我正在根据这个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)

asp.net-mvc google-api-dotnet-client

3
推荐指数
1
解决办法
2792
查看次数