public ActionResult Authenticate(string success, string failure, string permissions, string state, bool offline) { string key = Guid.NewGuid().ToStringValue(); OAuthState authState = new OAuthState(); authState.FailureUrl = failure; authState.SuccessUrl = success; authState.State = state; this.stateManager.SaveState(key, authState); IDictionary <string, string> parameters = new Dictionary <string, string>(); if (offline) { parameters.Add("access_type", "offline"); } List <string> permissionList = new List <string>(); if (!string.IsNullOrWhiteSpace(permissions)) { permissionList.AddRange(permissions.Split(new[] { " " }, StringSplitOptions.RemoveEmptyEntries)); } GoogleClient client = new GoogleClient(this.context.Config.Social.Google.AppID, this.context.Config.Social.Google.AppSecret); string authorizationUrl = client.BuildAuthorizationUrl(SocialApiSetting.BuildUrl(this.context.Config.Social.Google.Domain, "social/google/authorize"), permissionList, key, parameters); return(new RedirectResult(authorizationUrl)); }