使用具有现有访问令牌的 Google API .NET 客户端

2024-05-20

用例如下:移动应用程序正在通过 Google 对用户进行身份验证,并且在某些时候,我们需要将用户的视频发布到他的 YouTube 帐户;出于实际原因,实际发布应该由后端完成(已经存储在那里的大文件)。

由于用户已经通过应用程序的身份验证,因此应用程序只需将用户的访问令牌发送到后端。现在我的困难是找到如何在 .NET 客户端中使用此访问令牌...到目前为止,我已经尝试创建UserCredential从该访问令牌但这似乎不起作用。此外,我们不需要提供的所有令牌刷新逻辑UserCredential我们知道此时访问令牌是有效的。

任何帮助将不胜感激,谢谢!


从技术上讲,您可以只转发访问令牌,然后当您想要调用 api 时,只需将访问令牌作为不记名令牌添加到标头中

curl --request POST \
  'https://youtube.googleapis.com/youtube/v3/videos?key=[YOUR_API_KEY]' \
  --header 'Authorization: Bearer [YOUR_ACCESS_TOKEN]' \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --data '{}' \
  --compressed

这可以通过 .net 使用 Http 客户端手动完成。

但是,如果您想使用 Google .Net 客户端库,您可以执行以下操作。

var credential = GoogleWebAuthorizationBroker.AuthorizeAsync(GoogleClientSecrets.Load(stream).Secrets,
                                                                             scopes,
                                                                             userName,
                                                                             CancellationToken.None,
                                                                             new FileDataStore(credPath, true)).Result;

但是,您需要做一些事情。首先,您需要自己实现 FileDataStore,它将接受传递给它的访问令牌。我有一些自定义数据存储的示例here https://gist.github.com/LindaLawton/a11851d51f13addd70264d01be1928bf您可以看看它们可能会有所帮助。

第二个问题是,您传递给 Google .net 客户端库的客户端 ID 和客户端密钥需要与最初用于创建访问令牌的客户端 ID 和客户端密钥相同。我不能 100% 确定这是否会成为问题,因为您没有传递刷新令牌,因此客户端库不需要刷新访问令牌,它只需要使用它。

还有其他方法可以创建与客户端库一起使用的虚拟凭据对象,但这是我过去使用过的方法。

我个人认为以这种方式在服务器之间传递访问令牌不是一个好主意。您确实应该让用户正确授权您的应用程序。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用具有现有访问令牌的 Google API .NET 客户端 的相关文章

随机推荐