2012-08-22 2 views
3

Google.GData.Client .NET 라이브러리를 사용하고 OAuth 세션을 시작하려고하면 세션이 만료 될 때까지 제대로 작동합니다. 처음 GetAccessToken을 입력하면 RefreshToken 값이 null이라는 요청을하는 것 같습니다.GData OAuthUtil.GetAccessToken이 refresh_token 값을 반환하지 않습니다.

1 단계 (Default.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"); 

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. 이 때문에 나는 값의 오류가 null 될 수 없습니다받지 않고

OAuthUtil.RefreshAccessToken(parameters); 

를 호출 할 수 없습니다.

답변

5

OAuth 2.0 오프라인 흐름에서는 처음 사용자가 인증 코드를 교환하고 앱에 대한 액세스 권한을 부여 할 때만 새로 고침 토큰을받습니다. 나중에 사용하기 위해 새로 고친 토큰을 데이터베이스에 저장해야합니다.

언제든지 사용자의 새로 고침 토큰이 필요하며 데이터베이스에 해당 토큰이 없거나 손상되었거나 취소 된 인증서가 있으면 권한 페이지로 다시 보내야합니다. 다시 액세스 권한을 부여하고 새로운 새로 고침 토큰을 제공 할 수 있습니다.

Google Drive SDK documentation은이 프로세스를 철저히 설명합니다. 또한 참조 용으로 사용할 수있는 a complete ASP.NET MVC application이 있습니다.

+0

그것이 내가 AuthToken을 처음 가지고있을 때 새로 고침 코드를 얻지 못하는 것 같았습니다. 정식 리디렉션시이를 검색해야합니까? – Lloyd

+1

https://accounts.google.com/b/0/IssuedAuthSubTokens?hl=ko에서 앱 액세스를 취소하고 다시 시도하십시오. 처음으로 새로 고침 토큰을 받아야합니다 ( –

+0

). 내 DB에 저장된 값을 지우고 있었는데, 액세스를 허용 한 후 첫 번째 응답이 새로 고침 토큰을 반환합니다. 이제 DB에 저장하고 멋지게 윙윙니다. 감사! – Lloyd

관련 문제