// GetAuthorization /// <summary> /// Gets the authorization object for the client-side flow /// </summary> /// <param name="client">The web server client used for authorization</param> /// <returns>An authorization state that can be used for API queries </returns> private IAuthorizationState GetAuthorization(WebServerClient client) { if (_authstate == null) { if (_refreshToken != null) { _authstate = CreateState(_refreshToken, false); } if (_accessToken != null) { _authstate = CreateState(_accessToken, true); } } // If this user is already authenticated, then just return the auth state. IAuthorizationState state = _authstate; if (state != null) { return state; } // Check if an authorization request already is in progress. HttpRequestInfo reqinfo = new HttpRequestInfo(HttpContext.Current.Request); //if (reqinfo) state = client.ProcessUserAuthorization(reqinfo); // Check to see if we have an access token and use that to generate the state. if (_accessToken != null) { state = CreateState(_accessToken, true); // Check to see if we have a refresh token and use that to get the auth state. } else if (_refreshToken != null) { state = CreateState(_refreshToken); bool worked = client.RefreshToken(state); if (state != null) { return state; } } if (state != null && (!string.IsNullOrEmpty(state.AccessToken) || !string.IsNullOrEmpty(state.RefreshToken))) { // Store and return the credentials. HttpContext.Current.Session["AUTH_STATE"] = _authstate = state; _accessToken = state.AccessToken; _refreshToken = state.RefreshToken; return state; } // Otherwise do a new authorization request. string scope = "https://www.googleapis.com/auth/plus.login"; OutgoingWebResponse response = client.PrepareRequestUserAuthorization(new[] { scope }); response.Send(); // Will throw a ThreadAbortException to prevent sending another response. return null; }
/// <summary> /// Gets the authorization object for the client-side flow. /// </summary> /// <param name="client">The client used for authorization. /// </param> /// <returns>An authorization state that can be used for API queries. /// </returns> protected IAuthorizationState GetAuthorization(WebServerClient client) { // If we don't yet have user, use the client to perform // authorization. if (_authState != null) { HttpRequestInfo reqinfo = new HttpRequestInfo(HttpContext.Current.Request); client.ProcessUserAuthorization(reqinfo); } // Check for a cached session state. if (_authState == null) { _authState = (IAuthorizationState)HttpContext.Current. Session["AUTH_STATE"]; } // Check if we need to refresh the authorization state and refresh // it if necessary. if (_authState != null) { if (_authState.RefreshToken.IsNotNullOrEmpty() && (_authState.AccessToken == null || DateTime.UtcNow > _authState.AccessTokenExpirationUtc)) { client.RefreshToken(_authState); } return _authState; } // If we fall through to here, perform an authorization request. OutgoingWebResponse response = client.PrepareRequestUserAuthorization(); response.Send(); // Note: response.send will throw a ThreadAbortException to // prevent sending another response. return null; }