如何代表用户进行身份验证以从 webjob/azure 函数访问他们的 google 日历信息?

How to authenticate on behalf of user to access their google calendar information from webjob/azure function?

我们有一个网络应用程序,允许用户将他们日历中的某些事件同步到我们的系统。我们可以让用户登录 google 并授权我们读取他们的日历和个人资料。

现在为了同步他们的事件,我们希望有一个 azure 函数,webjob 运行 在特定的时间间隔连接到他们的 google 日历,并根据一些逻辑将事件信息添加到我们的数据库,以便用户可以在我们的网络应用程序中查看内容。

如何让 azure function/webjob 在用户启用精选和授权应用以访问其日历后代表用户进行身份验证?

=======================================

更新:

如果其他人需要的话,这是代码片段示例。

TokenResponse token = new TokenResponse { RefreshToken = syncUser.GoogleRefreshToken };
UserCredential credentials = new UserCredential(new GoogleAuthorizationCodeFlow(
    new GoogleAuthorizationCodeFlow.Initializer
    {
        ClientSecrets = new ClientSecrets
        {
            ClientId = "ClientIDValue",
            ClientSecret = "ClientSecretValue"
        }
    }), "user", token);

CalendarListResource.ListRequest request = service.CalendarList.List();
CalendarList calendars = request.Execute();

假设您正在存储用户刷新令牌,并且您可以从存储刷新令牌的位置读取您的 azure 函数。您只需要使用刷新令牌为用户请求一个新的访问令牌,您就可以离线访问他们的数据。

现在我不是 Azure 专家,但您必须确保正确设置重定向 uri,以便 azure 可以从授权中获取响应。您还应该设置代码来处理刷新令牌过期。

还 GoogleAuthorizationCodeFlow.Initializer 支持 IDataStore,这意味着您可以设置自己的 Idatastore 实现,并使用它从您抓取它的地方为它提供刷新令牌。