如何代表用户进行身份验证以从 webjob/azure 功能访问他们的谷歌日历信息?

Posted

技术标签:

【中文标题】如何代表用户进行身份验证以从 webjob/azure 功能访问他们的谷歌日历信息?【英文标题】:How to authenticate on behalf of user to access their google calendar information from webjob/azure function? 【发布时间】:2021-08-03 02:29:54 【问题描述】:

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

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

在用户启用特色和授权的应用程序以访问他们的日历后,我如何让天蓝色功能/网络作业代表用户进行身份验证?

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

更新:

如果其他人需要,这是代码 sn-p 示例。

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();

【问题讨论】:

假设您正在存储用户刷新令牌,并且您可以从存储新令牌的任何位置读取您的天蓝色函数。您只需要使用刷新令牌为用户请求一个新的访问令牌,您就可以离线访问他们的数据。 @DaImTo 你是对的。在他们的文档中找不到一个明显的答案。谢谢你。如果可以的话,我会将其添加到答案中,以便我标记它。 为什么你不使用Asp .net core 你似乎在使用旧的 Asp .net MVC 示例。 那是因为这是当前基于 .net 构建的 webjob 上的实现。我们正在努力升级到将使用 .net 核心 sdk 的 azure 功能。 【参考方案1】:

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

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

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

【讨论】:

以上是关于如何代表用户进行身份验证以从 webjob/azure 功能访问他们的谷歌日历信息?的主要内容,如果未能解决你的问题,请参考以下文章

如何配置一个网站,该网站对 YouTube 凭据进行身份验证以供控制台应用程序使用?

空指针异常 - Android 中 Google 帐户的 GoogleAuthUtil 身份验证

如何使用 Web API 来对 MVC 应用程序进行身份验证

如何使用身份服务器对活动目录用户进行身份验证?

如何使用 Starscream 对用户进行身份验证

没有全局范围的 Laravel 身份验证