带有AWS Lambda的Google API授权-不支持FileDataStore

时间:2018-07-04 14:57:21

标签: c# amazon-web-services google-api aws-lambda google-authentication

我创建了一个WebAPI并将其发布到AWS Lambda。在此API中,我会自动通过GMail SMTP发送一些电子邮件。我的电子邮件代码如下:

var secrets = new ClientSecrets
{
    ClientId = Environment.GetEnvironmentVariable("GMailClientId"),
    ClientSecret = Environment.GetEnvironmentVariable("GMailClientSecret")
};

var googleCredentials = await GoogleWebAuthorizationBroker.AuthorizeAsync(secrets, new[] { GmailService.Scope.MailGoogleCom }, ((MailboxAddress)message.From.First()).Address, CancellationToken.None);
if (googleCredentials.Token.IsExpired(SystemClock.Default))
{
    await googleCredentials.RefreshTokenAsync(CancellationToken.None);
}

using (var client = new SmtpClient())
{
    client.Connect("smtp.gmail.com", 587, SecureSocketOptions.StartTls);

    var oauth2 = new SaslMechanismOAuth2(googleCredentials.UserId, googleCredentials.Token.AccessToken);
    client.Authenticate(oauth2);

    await client.SendAsync(message);
    client.Disconnect(true);
}

这在我的本地计算机上工作得很好,但是当尝试通过AWS Lambda运行它时,在调用GoogleWebAuthorizationBroker.AuthorizeAsync时出现以下错误:

  

此平台不支持相对FileDataStore路径。

GoogleWebAuthorizationBrokerAuthorizeAsync定义为:

public static Task<UserCredential> AuthorizeAsync(ClientSecrets clientSecrets, IEnumerable<string> scopes, string user, CancellationToken taskCancellationToken, IDataStore dataStore = null, ICodeReceiver codeReceiver = null);

我没有为dataStore参数提供任何内容,因此默认情况下它使用的是FileDataStore实现。

我猜Lambda不喜欢这样,因为它正在尝试访问文件系统。

任何人都曾经遇到过这个问题,如果是这样,您是否知道解决方案?我不确定IDataStore的任何Google实现都可以使用吗? https://developers.google.com/api-client-library/dotnet/reference/1.9.2/interfaceGoogle_1_1Apis_1_1Util_1_1Store_1_1IDataStore

编辑: 我想知道是否需要创建IDataStore的数据库实现吗?类似于:https://www.codeproject.com/Articles/1088092/ADO-NET-Implementation-of-Google-API-IDataStore。谷歌虽然没有提供这种实现似乎有点奇怪...

0 个答案:

没有答案