2

我有一个从以下位置获得的 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>

似乎也没有任何方法来操作标题。

4

1 回答 1

0

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

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

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

于 2014-07-08T13:45:41.717 回答