如何将Google AnalyticsAPI与2脚OAuth(Google Apps for business)结合使用?

时间:2011-09-23 20:30:42

标签: .net oauth google-analytics google-api 2-legged

我想为我工作的业务开发一个应用程序。我们正在使用Google Apps,希望从Google Analytics获取数据并将其显示在我们的某个网络应用中。我不希望客户端看到任何授权应用程序的请求。我想使用像http://www.google.com/support/a/bin/answer.py?hl=en&answer=162105这样的两条腿OAuth,但Google Analytics不在列表中。我还能用它吗?是.NET Google Data API library还是Google API .NET Client

支持

编辑1

使用Google API .NET Client,我提出了一些应该符合我的意义的事情:

var auth = new Google.Apis.Authentication.OAuth2LeggedAuthenticator(DOMAIN_CONSUMER_KEY, DOMAIN_CONSUMER_SECRET, USER_TO_IMPERSONATE, DOMAIN);

var service = new Google.Apis.Analytics.v3.AnalyticsService(auth);

service.Key = DEV_KEY_FROM_API_CONSOLE;

var _request = service.Management.Accounts.List();

foreach (var item in _request.Fetch().Items)
{
    Console.WriteLine(item.Name);
}

...但是我收到了这个错误:

Google.Apis.Requests.RequestError 
InvalidCredentials [401]
Errors [
    Message[Invalid Credentials] 
    Location[Authorization - header] 
    Reason[authError] 
    Domain[global]
    ]

由于

3 个答案:

答案 0 :(得分:3)

此博客文章逐步说明了如何使用Google API .Net客户端实现双方式身份验证。

http://bittwiddlers.org/?p=212#awp::?p=212

然而,作者以此评论结束了他的职位:

  

特定于google-api-dotnet-client项目的上述信息是相关的,但是如果您尝试执行任何异步工作或使用2LO(代表多个用户),该库会像筛子那样泄漏内存并会导致性能下降)。

祝你好运,如果您想出更好的解决方案,请告诉我,我对这个问题有点不满......

答案 1 :(得分:1)

我已经回答了类似的问题here。这解决了如何解决导致401 Invalid Credentials的几个问题,并可能帮助您使.Net API的v3版本正常工作。我只是在这里添加它,因为您的解决方案使用已弃用的v2 API来规避您在身份验证时遇到的问题。

答案 2 :(得分:0)

我找到了使用.NET library for the Google Data API的方法。由于this link,我找到了this guy。以下列出了所有Google Analytics帐户的工作代码,考虑到GOOGLE_APPS_DOMAIN_SECRET是使用this method生成的密钥,DOMAIN是Google Apps的域名,而username是前缀(例如:“firstname.lastname”)来自我们想要模拟的Google Apps用户的电子邮件(例如,管理员可以访问所有内容):

        var requestFactory = new GOAuthRequestFactory("an", "Any app name");
        requestFactory.ConsumerKey = DOMAIN;
        requestFactory.ConsumerSecret = GOOGLE_APPS_DOMAIN_SECRET;

        var service = new AnalyticsService("Any app name");
        service.RequestFactory = requestFactory;

        var query = new AccountQuery();
        query.OAuthRequestorId = username + "@" + DOMAIN;

        var serviceQuery = service.Query(query);

        foreach (AccountEntry Entry in serviceQuery.Entries)
        {
            WriteLine(Entry.Title.Text);
        }

唯一的问题是,我必须冒充用户,并且不能简单地访问所有内容。

编辑:方法已弃用