2016-07-21 16 views
6

sadece Google Apis ile başlıyor. Google Cloud Platform hesabımda, alan çapında yetkilendirme için bir Hizmet Hesabı oluşturdum. Bu servis hesabı için json formatında özel bir anahtar dosya kaydettim.Google Credential, json özel anahtar dosyası (ServiceAccount) tarafından oluşturulan - Kullanıcının kimliğine bürünme nasıl ayarlanır?

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

Nasıl ben taklit istediğiniz kullanıcıyı set yapabilirsiniz: benim test uygulamasında

i GoogleCredential örneğini oluşturarak ben? Bir p12 özel anahtarı kullanırken yapabileceğim şunlardır:

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

Ama nasıl ben GoogleCredential ve json privatkey dosyası ile bu "kolay yoldan" yapabilirim?

Tür

cevap

0

JavaScript aşağıda konusunda ama eminim #c benzer yapabilirsiniz.

Sana doğru kapsam izinlerine sahip varsayarak,

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

Bu yeni bir jetonu, her zaman verecektir CLIENT_ID ve client_secret yaklaşım kullanır.

Sen kapsamı kontrol etmek çekinmeyin almak konusunda daha fazla bilgi için (Google'ın docs bazıları tarafından gösterilen ziyade 'tuşu =') API erişmek istediğiniz ACCESS_KEY her şey

eklemek gerekenleri yazdığım: http://thisistony.com/blog/googleanalytics/google-analytics-api-oauth-ever-wondered-how-to-get-the-access_token/

+1

Ama. Net sarıcı api'yi kullanmaya çalışıyorum. Doğrudan dinlenme çağrılarından kaçınmaya çalışıyorum. – ReneDev

5

Ok i GoogleCredential ve içi ve iç sınıf 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)); 
} 

birisi (belki peleyal) daha iyi bir fikir varsa bunu yapmak için di kodunu kopyalayarak şimdi çözüldü GoogleCredential aracılığıyla dürüstçe bana bir ipucu vermek için çekinmeyin;)

+0

Teşekkür ederim. Az önce beni yaklaşık 4 saat başımdan kurtardın, sanırım! –