2014-11-06 182 views
0

开始与谷歌电子表格的工作(需要获得/把一些数据存在)谷歌电子表格授权问题

我有一个ASP.NET Web的应用程序(MVC),该认证使用谷歌的OAuth2用户。 也就是说,用户使用Google帐户登录并授权该应用程序。应用程序成为回调中的一个标记(如“ya29.bla_bla_bla”)。据我所知,现在应该可以使用这个令牌来访问电子表格。

OAuth2请求包含范围“https://spreadsheets.google.com/feeds”。

现在我想要列出使用谷歌的GData Spreadsheets library

var ss = new SpreadsheetsService("xxx"); 
ss.SetAuthenticationToken(token); 
var q = new SpreadsheetQuery(); 
var result = ss.Query(q); 

张(我想最简单的事情),但是这将导致401:拒绝访问,凭证无效:(

全面启动。使用Fiddler调查以下请求被发送:

GET https: //spreadsheets.google.com/feeds/spreadsheets/private/full 
Authorization: GoogleLogin auth=ya29.bla_bla_bla 

这导致401,访问被拒绝, “无效令牌”

但如果我这样做查询“手动”,并授权使用“承载...”而不是“的GoogleLogin AUTH = ...”,像这样:

GET https: //spreadsheets.google.com/feeds/spreadsheets/private/full 
Authorization: Bearer ya29.bla_bla_bla 

然后,它的工作原理,并返回预期的工作表清单。

我在做什么错?也许令牌不是我需要的那个?那我需要哪一个? 或者我应该指定一个版本/范围/无论什么地方? “Authorization:Bearer ...”和“Authorization:GoogleLogin auth = ...”之间可能有什么区别?

+1

你的“手”的版本是正确的。它看起来像是一个问题,您正在使用的库尚未更新到OAuth 2。 – pinoyyid 2014-11-07 19:33:16

回答

0

经过研究,发现该库默认使用“旧”认证方法。如果你告诉它使用的oauth2,那么它的工作原理:)为了做到这一点,应该在RequestFactory设置为GOAuth2RequestFactory

var ss = new SpreadsheetsService("xxx"); 

var authParams = new OAuth2Parameters 
{ 
    TokenType = "Bearer", 
    AccessToken = token, 
    ... 
}; 

ss.RequestFactory = new GOAuth2RequestFactory("...", "...", authParams); 

var q = new SpreadsheetQuery(); 
var result = ss.Query(q);