2013-05-01 1 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/ "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));