2016-07-21 5 views
6

только начиная с Google Apis. В моей учетной записи Google Cloud Platform я создал учетную запись службы для делегирования домена. Я сохранил файл секретного ключа в формате json для этой учетной записи службы.GoogleCredential, созданный файлом закрытого ключа json (ServiceAccount) - как настроить пользователя для выдачи себя?

В моем тестовом приложении я создаю экземпляр GoogleCredential:

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

Как настроить пользователя я хочу, чтобы выдавать себя? При использовании закрытого ключа p12 я мог бы сделать следующее:

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 и файлом privatkey JSon?

Сердечные приветы

ответ

0

Javascript ниже, но вы можете сделать то же в #c я уверен.

Я использую client_id и client_secret подход

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

Это даст вам новый маркер каждый раз, если у вас есть правильные разрешения области видимости.

Вам нужно будет добавлять access_key каждый раз вы хотите получить доступ к API (а не «ключ =» обозначенную некоторые документы Google)

Для получения дополнительной информации о том, как получить охват, не стесняйтесь, чтобы проверить, что Я писал: 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) имеет лучшее представление о том, чтобы сделать это ди прямо через GoogleCredential не стесняйтесь давать мне подсказку;)

+0

Спасибо. Думаю, вы спасли мне примерно 4 часа головной боли! –