GData OAuthUtil.GetAccessToken不返回refresh_token值

时间:2012-08-22 16:25:32

标签: .net oauth gdata

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

Step1 (default.aspx):

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

Step2 (oauth.aspx):

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

Step3 (results.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

1 个答案:

答案 0 :(得分:5)

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

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

Google Drive SDK documentation彻底解释了这个过程。此外,您可以使用a complete ASP.NET MVC application作为参考。