Google电子表格授权问题

时间:2014-11-06 14:26:14

标签: c# asp.net asp.net-mvc oauth-2.0 google-oauth

开始使用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 = ..."?

1 个答案:

答案 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);