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

时间:2013-07-08 13:16:04

标签: c# .net gdata

我有一个来自的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中的服务?

我找到的所有examples都将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>

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

1 个答案:

答案 0 :(得分:0)

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

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

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