4

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

编辑 1

使用Google API .NET 客户端,我想出了一些对我来说应该有用的东西:

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]
    ]

谢谢

4

3 回答 3

3

这篇博文逐步解释了如何使用 Google API .Net 客户端实现 2 腿身份验证。

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

然而,作者以这条评论结束了他的帖子:

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

祝你好运,如果你找到更好的解决方案,请告诉我,我有点厌烦这个问题......

于 2012-07-10T00:54:33.307 回答
1

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

于 2012-02-08T14:43:36.220 回答
0

我找到了一种将.NET 库用于 Google Data API的方法。感谢这个人,我找到了这个链接。这是一个列出所有 Analytics 帐户的工作代码,考虑到 GOOGLE_APPS_DOMAIN_SECRET 是使用此方法生成的密钥,DOMAIN 是 Google Apps 的域,用户名是电子邮件的前缀(例如:“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);
        }

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

编辑:方法已弃用

于 2011-11-11T18:37:53.463 回答