【问题标题】:How to call GData services with an OAuth access token?如何使用 OAuth 访问令牌调用 GData 服务?
【发布时间】:2013-07-08 13:16:03
【问题描述】:

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

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

【问题讨论】:

    标签: c# .net gdata


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-29
      • 2015-11-29
      • 2011-06-17
      • 2016-12-03
      • 2016-08-13
      • 2013-05-02
      相关资源
      最近更新 更多