2015-11-24 4 views
1

Мы используем для создания делегатов электронной почты через API настроек электронной почты Google, но после устаревания OAuth 1.0 мы больше не смогли аутентифицироваться должным образом. После некоторых исследований я думаю, что мы должны создать учетную запись службы, делегировать доступ к домену для этой учетной записи службы, а затем аутентифицировать ее. Однако я не могу заставить его работать, все, что я получаю от Google, несанкционировано 401. Кто-нибудь знает, что я делаю неправильно? Вот большая часть кода, я использую .Net/C#, и я использую Google Apps для бизнеса.Как создать делегацию Gmail с учетной записью службы?

ServiceAccountCredential credential = new ServiceAccountCredential(new ServiceAccountCredential.Initializer("serviceAccountEmail") 
       { 
        Scopes = new[] { "https://apps-apis.google.com/a/feeds/emailsettings/2.0/ " }, 
        User = "admin email string" 
       }.FromCertificate({X509 certificate from service account p12 file})); 

credential.RequestAccessTokenAsync(System.Threading.CancellationToken.None).Wait(-1); 

GoogleMailSettingsService service = new GoogleMailSettingsService("domain name", "appname"); 
       service.SetAuthenticationToken(credential.Token.AccessToken); 

       service.CreateDelegate("delegator", "delegate"); 
+0

ли вы когда-нибудь получить эту работу? Мы находимся в одной лодке (GAFE), и сценарий нашей делегации сломался, когда они осудили OAuth 1 в прошлом году. –

+0

Да, извините, я забыл, что я разместил это здесь. Я добавил ответ ниже. Дайте мне знать, если вам нужна дополнительная помощь, это решение заняло у меня много времени, когда я работал над этим. – andydnd

ответ

2

Для тех, кому может понадобиться этот ответ в будущем, я смог предоставить решение через следующее. Для справки Я запускаю веб-приложение с использованием среды MVC, но решение может быть изменено для консольного или GUI автономного приложения.

В принципе, я смог аутентифицировать GoogleMailSettingsService.Service.RequestFactory с объектом GOAuth2RequestFactory.

Например:

GoogleMailSettingsService service = new GoogleMailSettingsService("domain", "applicationName"); 
service.RequestFactory = new GOAuth2RequestFactory("service", "AppName", new OAuth2Parameters() { AccessToken = AuthorizationCodeWebApp.AuthResult.Credential.Token.AccessToken }); 

Теперь для AuthorizationCodeWebApp.AuthResult я осуществил следующее:

public async Task<ActionResult> DelegationMenu(CancellationToken cancellationToken) 
{ 
     var result = await new AuthorizationCodeMvcApp(this, new AppFlowMetadata()).AuthorizeAsync(cancellationToken); 

     if (result.Credential == null) 
      return new RedirectResult(result.RedirectUri); //Will redirect to login page for Google Admin to authenticate. 

     Session["AuthResult"] = result; 
     return View(); 
} 

public class AppFlowMetadata : FlowMetadata 
{ 
    private static readonly IAuthorizationCodeFlow flow = 
     new GoogleAuthorizationCodeFlow(new GoogleAuthorizationCodeFlow.Initializer 
     { 
      ClientSecrets = new ClientSecrets 
      { 
       ClientId = "ClientId", 
       ClientSecret = "ClientSecret" 
      }, 
      Scopes = new[] { "https://apps-apis.google.com/a/feeds/emailsettings/2.0/" }, 
      DataStore = new FileDataStore("C:\\OAuth2.0Tokens") 
     }); 

    public override string GetUserId(Controller controller) 
    { 
     var user = controller.Session["user"]; 
     if (user == null) 
     { 
      user = Guid.NewGuid(); 
      controller.Session["user"] = user; 
     } 

     return user.ToString(); 
    } 

    public override IAuthorizationCodeFlow Flow 
    { 
     get { return flow; } 
    } 
} 
0

Учетная запись службы для этого действия не требуется. API настроек электронной почты в SDK администратора позволяет Super Admin устанавливать делегацию для учетной записи в домене без необходимости выдавать себя за пользователя через учетную запись службы.

Для получения дополнительной информации об этом API посетите сайт разработчиков this section. Вы также можете проверить это на OAuth Playground и добавить делегатов прямо оттуда.

+1

Этот раздел с API настроек электронной почты не работает. Так наш инструмент работал до OAuth 1.0, теперь все, что я получаю, это «Выполнение запроса на аутентификацию, возвращаемое непредвиденной ошибкой: 404». Я - «Супер администратор» Google, но я могу дольше создавать делегаты таким образом. Любые другие мысли? – andydnd

Смежные вопросы