2016-07-21 15 views
6

Google Apisから始めるだけです。 私のGoogle Cloud Platformアカウントでは、ドメイン全体の委任のためのサービスアカウントを作成しました。このサービスアカウントの秘密鍵ファイルをjson形式で保存しました。私のテストアプリケーションでjson秘密鍵ファイル(ServiceAccount)によって作成されたGoogleCredential - 偽装するようにユーザーを設定する方法

私はGoogleCredentialインスタンスを作成しています:

var credential = 
      GoogleCredential.FromStream(new FileStream("privatekey.json", FileMode.Open, FileAccess.Read)) 
      .CreateScoped(Scopes); 

私が偽装するユーザーを設定できますか?

var credential = new ServiceAccountCredential(
    new ServiceAccountCredential.Initializer("[email protected]") //service Account id 
    { 
     Scopes = Scopes, 
     User = "[email protected]" //the user to be impersonated      
    }.FromCertificate(new X509Certificate2(@"xxx.p12", "notasecret", X509KeyStorageFlags.Exportable))); 

しかし、どのように私はGoogleCredentialでこの「簡単な方法」とJSONのprivatkeyファイルの操作を行うことができます?私は次の操作を行うことができP12秘密鍵を使用して

種類は以下のJavascript

答えて

0

についてはできますが、私は確信している#Cに似て行うことができます。

私は

function tokenRefresh(){ 

    var uri = "https://accounts.google.com/o/oauth2/token"; 

    var payload = 
     { 
     'client_id' : 'XXXXXXXX.apps.googleusercontent.com', 
     'client_secret' : 'XXXXXXXX', 
     'grant_type' : 'refresh_token', 
     'content_type' : 'application/x-www-form-urlencoded', 
     'refresh_token' : 'XXXXXXXX' 
     }; 

    var options = 
     { "method" : "POST", 
     "muteHttpExceptions" : false, 
     "payload" : payload 
     }; 

    var response = UrlFetchApp.fetch(uri, options), 
     response_json = JSON.parse(response.getContentText()), 
     token = response_json.access_token; 
    return(token); 
} 

のclient_idとclient_secretアプローチを使用これは、あなたが正しいスコープの権限を持っていると仮定すると、あなたのたびに新しいトークンを提供します。

あなたはスコープがチェックアウトして自由に感じる取得する方法の詳細については(Googleのドキュメントのいくつかで示されるのではなく「キー=」)あなたがAPIにアクセスするACCESS_KEY毎回

を追加する必要がありますどのような私が書いた:http://thisistony.com/blog/googleanalytics/google-analytics-api-oauth-ever-wondered-how-to-get-the-access_token/

+1

しかし、私は.netラッパーAPIを使用しようとしています。私は直接休憩を避けようとしています。 – ReneDev

5

[OK]を、私はGoogleCredentialの内部や内部クラスDefaultCredentialProvider

using (var fs = new FileStream("key.json", FileMode.Open, FileAccess.Read)) 
{ 
    var credentialParameters = 
     NewtonsoftJsonSerializer.Instance.Deserialize<JsonCredentialParameters>(fs); 
    if (credentialParameters.Type != "service_account" 
     || string.IsNullOrEmpty(credentialParameters.ClientEmail) 
     || string.IsNullOrEmpty(credentialParameters.PrivateKey)) 
      throw new InvalidOperationException("JSON data does not represent a valid service account credential."); 
    return new ServiceAccountCredential(
     new ServiceAccountCredential.Initializer(credentialParameters.ClientEmail) 
     { 
      Scopes = Scopes, 
      User = _adminUser //the user to be impersonated 
     }.FromPrivateKey(credentialParameters.PrivateKey)); 
} 

誰か(多分peleyal)は、より良いアイデアを持っている場合はそれを行うには、ジからコードをコピーして、今それを解決しましたすぐに私のヒントを教えてください。)

+0

ありがとうございます。あなたはちょうど約4時間の頭痛を救った、と思う! –

関連する問題