4

I want to develop an application for the business I work. We are using Google Apps and want to get data from Google Analytics and show it in one of our web apps. I do not want the client to see any request to authorize the app. I want to use 2-legged OAuth like such http://www.google.com/support/a/bin/answer.py?hl=en&answer=162105 but Google Analytics is not in the list. Will I still be able to use it ? Is it supported in the .NET Google Data API library or the Google API .NET Client ?

EDIT 1 :

Using the Google API .NET Client, I came up with something that should work to my sense :

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);
}

... but I get this error :

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

Thanks

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

GoogleDataAPIに.NETライブラリを使用するメソッドを見つけました。この男のおかげでこのリンクを見つけました。GOOGLE_APPS_DOMAIN_SECRETがこのメソッドを使用して生成されるキーであり、DOMAINがGoogle Appsのドメインであり、usernameがメールのプレフィックス(例: "firstname.lastname")であることを考慮して、すべてのAnalyticsアカウントを一覧表示する作業コードを次に示します。偽装したいGoogleAppsユーザーから(たとえば、管理者がすべてにアクセスできるようにするため):

        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 に答える