3

当我使用Google.GData.Client.NET 库并尝试启动OAuth会话时,它可以正常工作,直到会话过期。当我执行初始GetAccessToken请求时,该RefreshToken值似乎是null.

第 1 步(默认.aspx):

OAuth2Parameters parameters = new OAuth2Parameters();
//<<build parameters with keys and CLIENT_IDs and such>>
string authorizationUrl = OAuthUtil.CreateOAuth2AuthorizationUrl(parameters);
Response.Redirect(authorizationUrl);

第2步( oauth.aspx):

Session["ACCESS_CODE"] = Request.QueryString["code"];
Response.Redirect("Results.aspx");

第三步(结果.aspx)

if (Session["ACCESS_CODE"] == null)
  Response.Redirect("Default.aspx");

parameters.AccessCode = Session["ACCESS_CODE"].To_String();
OAuthUtil.GetAccessToken(parameters);
Response.Write("OAuth Access Token: " + parameters.AccessToken);
Session["ACCESS_TOKEN"] = parameters.AccessToken;
Session["REFRESH_TOKEN"] = parameters.RefreshToken;

当我此时检查代码时,我的RefreshToken == null. 因此我不能打电话

OAuthUtil.RefreshAccessToken(parameters); 

没有价值错误是不可能null的。

4

1 回答 1

5

使用 OAuth 2.0 离线流程,您只会在用户第一次交换授权码并授予对您的应用程序的访问权限时收到刷新令牌。您应该将该刷新令牌存储在数据库中以供以后使用。

如果在任何时候您需要用户的刷新令牌并且您的数据库中没有它,或者您拥有的令牌已损坏或被撤销,您必须将用户发送回授权页面,以便它可以再次授予访问权限并为您提供新的刷新令牌。

Google Drive SDK 文档彻底解释了这个过程。此外,还有一个完整的 ASP.NET MVC 应用程序,您可以将其用作参考。

于 2012-08-22T16:36:39.203 回答