2013-07-03 2 views
1

도메인 용 이메일 주소를 유지 관리하기 위해 .NET 용 Google Directory API 라이브러리를 사용하려고합니다. 최신 라이브러리는 google-admin-directory_v1-rev6-csharp-1.4.0-beta입니다. 지금까지 얻은 최선의 방법은 403 오류 (이 리소스/API에 액세스 할 수있는 권한이 없음)를받는 것입니다.Google의 디렉토리 API를 사용하셨습니까?

아무도 성공적으로 사용 했습니까? 그렇다면 코드, 팁 또는 트릭을 공유 할 수 있습니까?

답변

3

나는 이것을 사용해 콘솔 애플리케이션을 만드는 데 성공했다. 현재 인증 코드의 복사/붙여 넣기를 건너 뛸 수있는 방법을 찾고 있습니다. API 콘솔에서 API 액세스를 사용 설정하는 것을 잊지 마십시오. 내가 당신에게 작은 샘플을 보여주지 :

using System; 
using System.Diagnostics; 
using System.Linq; 
using System.Threading.Tasks; 
using System.Security.Cryptography; 
using System.Security.Cryptography.X509Certificates; 

using DotNetOpenAuth.OAuth2; 

using Google.Apis.Authentication.OAuth2; 
using Google.Apis.Authentication.OAuth2.DotNetOpenAuth; 
using Google.Apis.Samples.Helper; 
using Google.Apis.Services; 
using Google.Apis.Util; 
using Google.Apis.Admin.directory_v1; 
using Google.Apis.Admin.directory_v1.Data; 



namespace Bergstedts.CreateNewUser 
{ 
    public class Program 
    { 
    static void Main(string[] args) 
    { 
     // Display the header and initialize the sample. 
     CommandLine.EnableExceptionHandling(); 
     Console.WriteLine("Create users in a google apps domain!"); 
     Console.WriteLine("by Jonas Bergstedt 2013"); 

     // Get the user data and store in user object 
     Console.Write("Email: "); 
     string userId = Console.ReadLine(); 

     Console.Write("Givenname: "); 
     string GivenName = Console.ReadLine(); 

     Console.Write("Familyname: "); 
     string FamilyName = Console.ReadLine(); 

     Console.Write("Password: "); 
     string Password = Console.ReadLine(); 

     User newuserbody = new User(); 
     UserName newusername = new UserName(); 
     newuserbody.PrimaryEmail = userId; 
     newusername.GivenName = GivenName; 
     newusername.FamilyName = FamilyName; 
     newuserbody.Name = newusername; 
     newuserbody.Password = Password; 

     // Register the authenticator. 
     var provider = new NativeApplicationClient(GoogleAuthenticationServer.Description) 
      { 
       ClientIdentifier = "<your clientId from Google APIs Console>", 
       ClientSecret = "<your clientsecret from Google APIs Console>", 
      }; 

     var auth = new OAuth2Authenticator<NativeApplicationClient>(provider, GetAuthorization); 

     // Create the service. 
     var service = new DirectoryService(new BaseClientService.Initializer() 
      { 
       Authenticator = auth, 
       ApplicationName = "Create User", 
       ApiKey = "<your API Key from Google APIs console> (not sure if needed)"    
      }); 

     User results = service.Users.Insert(newuserbody).Execute(); 
     Console.WriteLine("User :" + results.PrimaryEmail + " is created"); 
     Console.WriteLine("Press any key to continue!"); 
     Console.ReadKey(); 
    } 
    private static IAuthorizationState GetAuthorization(NativeApplicationClient arg) 
    { 
     // Get the auth URL: 
     IAuthorizationState state = new AuthorizationState(new[] { DirectoryService.Scopes.AdminDirectoryUser.GetStringValue() }); 
     state.Callback = new Uri(NativeApplicationClient.OutOfBandCallbackUrl); 
     Uri authUri = arg.RequestUserAuthorization(state); 

     // Request authorization from the user (by opening a browser window): 
     Process.Start(authUri.ToString()); 
     Console.WriteLine(); 
     Console.Write("Authorization Code: "); 
     string authCode = Console.ReadLine(); 

     // Retrieve the access token by using the authorization code: 
     return arg.ProcessUserAuthorization(authCode, state); 
    } 
} 

}

+0

안녕하세요. NuGet 패키지를 사용 했습니까? 또는 어떻게 Directory API를 다운로드합니까? 미리 감사드립니다. –

+0

JoBe 코드 평화에 관한 문제를 전자 메일로 보내 주시겠습니까? –

+0

@OrlandoHerrera StackOverflow는 소셜 사이트가 아니기 때문에 의도적으로 다른 멤버에게 연락하는 것을 어렵게 만듭니다. 귀하가 요청한 사람이 귀하가 요청하기 전에 개인적으로 도움을 주겠다고 지시하지 않는 한, 사적인 도움에 대한 그러한 요청은 눈살을 찌푸리게됩니다. 그러나이 경우에도 이것은 사이트에서 서로를 도우려는 의미에서 가장 좋은 아이디어는 아닙니다. 질문 게시. 다른 사람들이 그것을보고 대답하게하십시오. 다른 사람들이 귀하의 질문과 답변으로부터 배우도록하십시오. 그것은 StackOverflow 방식입니다! =) –