从技术上讲,您可以只转发访问令牌,然后当您想要调用 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% 确定这是否会成为问题,因为您没有传递刷新令牌,因此客户端库不需要刷新访问令牌,它只需要使用它。
还有其他方法可以创建与客户端库一起使用的虚拟凭据对象,但这是我过去使用过的方法。
我个人认为以这种方式在服务器之间传递访问令牌不是一个好主意。您确实应该让用户正确授权您的应用程序。