开始使用Google Spreadsheets(需要在那里获取/放置一些数据)
我有一个ASP.NET网络应用程序(MVC),它使用Google 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,拒绝访问,"无效令牌"
但如果我这样查询"手工"并使用" Bearer ..."而不是" GoogleLogin auth = ..."在授权中,像这样:
GET https: //spreadsheets.google.com/feeds/spreadsheets/private/full
Authorization: Bearer ya29.bla_bla_bla
然后它可以工作,并按预期返回工作表列表。
我做错了什么?也许令牌不是我需要的那个?那我需要哪一个? 或者也许我应该指定一个版本/范围/无论在哪里? 什么可能是"授权:承载..."和#34;授权:GoogleLogin auth = ..."?
答案 0 :(得分:0)
经过一番研究,发现图书馆确实使用了#34; old"默认情况下的身份验证如果你告诉它使用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);