public override object Authenticate(IServiceBase authService, IAuthSession session, Auth request) { var tokens = this.Init(authService, ref session, request); var authServer = new AuthorizationServerDescription { AuthorizationEndpoint = new Uri(this.AuthorizeUrl), TokenEndpoint = new Uri(this.AccessTokenUrl) }; var authClient = new WebServerClient(authServer, this.ConsumerKey, ClientCredentialApplicator.PostParameter(this.ConsumerSecret)); IAuthorizationState authState; try { authState = authClient.ProcessUserAuthorization(); //authState = authClient.ProcessUserAuthorization(new HttpRequestWrapper(HttpContext.Current.Request)); } catch (ProtocolException ex) { Log.Error("Failed to login to {0}".Fmt(this.Provider), ex); return authService.Redirect(session.ReferrerUrl.AddHashParam("f", "ProcessUserAuthorization")); } if (authState == null) { try { var authReq = authClient.PrepareRequestUserAuthorization(this.Scopes, new Uri(this.CallbackUrl)); var authContentType = authReq.Headers[HttpHeaders.ContentType]; var httpResult = new HttpResult(authReq.ResponseStream, authContentType) { StatusCode = authReq.Status, StatusDescription = "Moved Temporarily" }; foreach (string header in authReq.Headers) { httpResult.Headers[header] = authReq.Headers[header]; } foreach (string name in authReq.Cookies) { var cookie = authReq.Cookies[name]; if (cookie != null) { httpResult.SetSessionCookie(name, cookie.Value, cookie.Path); } } authService.SaveSession(session, this.SessionExpiry); return httpResult; } catch (ProtocolException ex) { Log.Error("Failed to login to {0}".Fmt(this.Provider), ex); return authService.Redirect(session.ReferrerUrl.AddHashParam("f", "Unknown")); } } var accessToken = authState.AccessToken; if (accessToken != null) { try { tokens.AccessToken = accessToken; tokens.RefreshToken = authState.RefreshToken; tokens.RefreshTokenExpiry = authState.AccessTokenExpirationUtc; session.IsAuthenticated = true; var authInfo = this.CreateAuthInfo(accessToken); this.OnAuthenticated(authService, session, tokens, authInfo); return authService.Redirect(session.ReferrerUrl.AddHashParam("s", "1")); } catch (WebException we) { var statusCode = ((HttpWebResponse)we.Response).StatusCode; if (statusCode == HttpStatusCode.BadRequest) { return authService.Redirect(session.ReferrerUrl.AddHashParam("f", "AccessTokenFailed")); } } } return authService.Redirect(session.ReferrerUrl.AddHashParam("f", "RequestTokenFailed")); }