如何使用OAuth访问令牌调用GData服务

本文关键字:GData 服务 调用 访问令牌 何使用 OAuth | 更新日期: 2023-09-27 18:21:34

我有一个OAuth访问令牌,它来自:

var state = new AuthorizationState(new[] { "http://www.google.com/m8/feeds/" })
{
    Callback = new Uri(NativeApplicationClient.OutOfBandCallbackUrl)
};
// Redirect to:
var authUri = arg.RequestUserAuthorization(state)
...
var authState = arg.ProcessUserAuthorization(authCode, state);

之后,如何将authState.AccessToken从GData API传递到服务?

我找到的所有示例都将OAuth2Authenticator<>传递给服务的构造函数,例如:

var auth = new OAuth2Authenticator<NativeApplicationClient>(...);
var service = new PlusService(auth);

我正在尝试使用ContactsService,但最新版本(2.2.0.0)似乎没有这个构造函数——唯一的构造函数使用应用程序名称。

我已经尝试用ContactsService.SetAuthenticationToken()设置访问令牌,但请求标头设置不正确,它看起来像这样:

Authorization: GoogleLogin auth=<access token>

代替:

Authorization: Bearer <access token>

似乎也没有任何方法可以操作标头。

如何使用OAuth访问令牌调用GData服务

我们遇到了同样的问题。您不应该使用SetAuthenticationToken(),而应该像GData API页面上提供的示例所建议的那样,为RequestFactory分配OAuth2RequestFactory。

现在,如果您已经在GData API之外管理OAuth令牌,那么这似乎有些反直觉。事实证明,您实际上不需要向请求工厂提供clientId、clientSecret等。唯一重要的字段是OAuth访问令牌(如果它是有效的访问令牌)。

至少对我们来说,我们发现通过这种方法,GData API正确地指定了Authorization Http头,并且API调用是成功的。