将Google API .NET客户端与现有访问令牌一起使用

Tho*_*iss 7 c# google-api google-api-dotnet-client

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

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

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

DaI*_*mTo 1

从技术上讲,您可以只转发访问令牌,然后当您想要调用 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
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

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

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