2012-08-22 46 views
3

當我使用Google.GData.Client .NET庫並嘗試啓動OAuth會話時,它將正常工作,直到會話過期。似乎當我做我的初始GetAccessToken請求RefreshToken值是nullGData OAuthUtil.GetAccessToken不返回refresh_token值

第一步(Default.aspx的):

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

第二步(oauth.aspx):

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

步驟3(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

回答

5

使用OAuth 2.0脫機流程,您只會在用戶第一次交換授權碼並授予您的應用程序訪問權限時收到刷新令牌。您應該將該刷新令牌存儲在數據庫中供以後使用。

如果您在任何時候需要用戶的刷新令牌,並且您沒有在數據庫中擁有它,或者您擁有的令牌已損壞或已被撤銷,則必須將用戶發送回授權頁面,以便它可以再次授予訪問權限併爲您提供新的刷新令牌。

Google Drive SDK documentation徹底解釋了這個過程。此外,您可以使用a complete ASP.NET MVC application作爲參考。

+0

這就是我的想法,但是當我第一次得到AuthToken時,我似乎沒有得到任何刷新代碼。我應該在auth重定向時尋找它嗎? – Lloyd

+1

從https://accounts.google.com/b/0/IssuedAuthSubTokens?hl=zh_CN撤銷對您的應用的訪問權限,然後重試,您應該首次獲得刷新令牌 –

+0

似乎這樣做。我一直在清理我的DB存儲值,顯然允許訪問後的第一個響應返回刷新令牌。現在我將它存儲在數據庫中,並且很好地哼唱。謝謝! – Lloyd