2013-05-01 25 views
8

.netでサービスアカウントを使用してGoogleサービスAPIにアクセスする方法のサンプルがありますか?.netでServiceAccountを使用してGoogle OAuth2を使用するにはどうすればよいですか?

private const string SERVICE_ACCOUNT_EMAIL = "[email protected]"; 
private const string SERVICE_ACCOUNT_PKCS12_FILE_PATH = @"\path\test-privatekey.p12"; 

static DriveService BuildService() 
{ 
    X509Certificate2 certificate = new X509Certificate2(SERVICE_ACCOUNT_PKCS12_FILE_PATH, "notasecret", 
    X509KeyStorageFlags.Exportable); 

    var provider = new AssertionFlowClient(GoogleAuthenticationServer.Description, certificate) 
    { 
     ServiceAccountId = SERVICE_ACCOUNT_EMAIL, 
     Scope = DriveService.Scopes.Drive.GetStringValue(), 
    }; 
    var auth = new OAuth2Authenticator<AssertionFlowClient>(provider, AssertionFlowClient.GetState); 

    return new DriveService((new BaseClientService.Initializer() 
    { 
     Authenticator = auth 
    }); 
} 

これは、OAuth接続の返信に成功しません。これはどうすればできますか?私のサイトで

+0

解決方法をお探しですか? – Moelbeck

答えて

2

この場合、作業

var certificate = new X509Certificate2("pathTo***.p12", "notasecret", X509KeyStorageFlags.Exportable); 
     var serviceAccountEmail = "********-*********@developer.gserviceaccount.com"; 
     var userAccountEmail = "******@gmail.com"; 
     ServiceAccountCredential credential = new ServiceAccountCredential(
        new ServiceAccountCredential.Initializer(serviceAccountEmail) 
        { 
         Scopes = new[] { DriveService.Scope.Drive }, 
         User = userAccountEmail 

        }.FromCertificate(certificate)); 

     // Create the service. 
     var service = new DriveService(new BaseClientService.Initializer() 
     { 
      HttpClientInitializer = credential, 
      ApplicationName = "*****", 
     }); 
+0

私は奇妙な振る舞いに直面しています:絶対パスを置くときはいつでも、私はいつもexceptoinを取得します: "システムは指定されたファイルを見つけることができません||パス:C:\ www \ myproject \ App_Data \ key.p12"、このファイルをApp_Dataフォルダに入れ、それを '常にコピーする' – ailmcm

1
  1. サービスのための秘密鍵を作成します
  2. credencialサービスアカウントキーを作成します。 (キーjson)。 例:

    { "タイプ": "service_account"、 "PROJECT_ID":」... " "private_key_id":" ... " "PRIVATE_KEY":" .... "、 " client_email ":" ..... @ developer.gserviceaccount.com "、 " client_id ":" .... "、 " auth_uri ":" ... accounts.google.com/o/ oauth2/auth "、 " token_uri ":" ... accounts.google.com/o/oauth2/token "、 " auth_provider_x509_cert_url ":" ... www.googleapis.com/oauth2/v1/certs "、 "client_x509_cert_url": "... www.googleapis.com/robot/v1/metadata/x509/....-compute%40developer.gserviceaccount.com" }

  3. このjsonでは、c#クラスを生成する必要があります。使用することができます(http://json2csharp.com/)。

    VAR _pathJson = @ "C:\ servicekey.json" これはcredencial生成するには、このコードを使用する

  4. 高速です。 var json = File.ReadAllText(_pathJson); var cr = JsonConvert.DeserializeObject(json); =新しいServiceAccountCredential(新ServiceAccountCredential.Initializer(cr.ClientEmail) { スコープ=新しい[] {YouTubeService.Scope.YoutubeUpload/ここで明示的ServiceAccountCredential資格 VaRの資格を作成 // "個人的な" サービスアカウントの資格情報 //使用するスコープを入れてください /} } .FromPrivateKey(cr.PrivateKey));

関連する問題