/// <summary> /// 傳入 Google Token 物件,處理成 CalendarService 後回傳 /// </summary> /// <param name="GoogleTokenModelObj"></param> /// <returns></returns> public static CalendarService GetCalendarService(GoogleTokenModel GoogleTokenModelObj) { CalendarService service = null; GoogleClientSecrets clientSecret; using (var stream = new FileStream(Gfolder + @"\client_secret.json", FileMode.Open, FileAccess.Read)) { clientSecret = GoogleClientSecrets.Load(stream); } IAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow( new GoogleAuthorizationCodeFlow.Initializer { ClientSecrets = clientSecret.Secrets, DataStore = new FileDataStore(Gfolder), Scopes = new[] { CalendarService.Scope.Calendar } }); var result = new AuthorizationCodeWebApp(flow, "", "").AuthorizeAsync(UserId, CancellationToken.None).Result; service = new CalendarService(new BaseClientService.Initializer { ApplicationName = "donma-test", HttpClientInitializer = result.Credential }); return(service); }
protected void btnStart_Click(object sender, EventArgs e) { GoogleClientSecrets clientSecret; //匯入專案憑證 using (var stream = new FileStream(Gfolder + @"\client_secret.json", FileMode.Open, FileAccess.Read)) { clientSecret = GoogleClientSecrets.Load(stream); } //建立流程權限 IAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow( new GoogleAuthorizationCodeFlow.Initializer { ClientSecrets = clientSecret.Secrets, DataStore = new FileDataStore(Gfolder), Scopes = new[] { CalendarService.Scope.Calendar } }); var uri = System.Web.HttpContext.Current.Request.Url.ToString(); var result = new AuthorizationCodeWebApp(flow, uri, "success").AuthorizeAsync(UserId, CancellationToken.None).Result; if (result.RedirectUri != null) { //導去授權頁 Response.Redirect(result.RedirectUri); } }
// // Inherit methods from parent class override public object Authorize(HttpRequest Request, string accountName) { try { var uri = Request.Url.ToString(); var code = Request["code"]; var error = Request["error"]; if (!string.IsNullOrEmpty(error)) { if (error == "access_denied") { return(new UserRejectException()); } else { return(new UnknownException(error)); } } // перед авторизацией нужно обнулить CalendarService = null; if (code != null) { string redirectUri = uri.Substring(0, uri.IndexOf("?")); var token = CodeFlow.ExchangeCodeForTokenAsync(accountName, code, redirectUri, CancellationToken.None).Result; string state = Request["state"]; var result = AuthWebUtility.ExtracRedirectFromState(CodeFlow.DataStore, accountName, state); return(result); } else { string redirectUri = uri; string state = "ostate_";// Guid.NewGuid().ToString("N"); var result = new AuthorizationCodeWebApp(CodeFlow, redirectUri, state).AuthorizeAsync(accountName, CancellationToken.None).Result; if (result.RedirectUri != null) { return(result); } else { CalendarService = new CalendarService(new BaseClientService.Initializer() { HttpClientInitializer = result.Credential, ApplicationName = APPLICATION_NAME }); // alright return("OK"); } } } catch (Exception ex) { return(ex); } return(null); }
internal string GetAuthorizeUrl(string callerUrl, string redirectUrl, int memberId) { var flow = GetFlow(); var result = new AuthorizationCodeWebApp(flow, redirectUrl, memberId.ToString()).AuthorizeAsync(memberId.ToString(), CancellationToken.None).Result; return(result.RedirectUri); }
public async Task <APIGatewayProxyResponse> HandleAsync(APIGatewayProxyRequest input, ILambdaContext context) { var ssmClient = new Amazon.SimpleSystemsManagement.AmazonSimpleSystemsManagementClient(); var googleOauthClientId = await ssmClient.GetParameterAsync(new GetParameterRequest { Name = "/GoogleOauthProxy/GoogleClientId" }); var googleOauthClientSecret = await ssmClient.GetParameterAsync(new GetParameterRequest { Name = "/GoogleOauthProxy/GoogleSecretKey" }); var googleOauthUrlRegex = await ssmClient.GetParameterAsync(new GetParameterRequest { Name = "/GoogleOauthProxy/UrlRegex" }); var returnUrl = input.QueryStringParameters["redirectUri"]; var urlRegex = new Regex(googleOauthUrlRegex.Parameter.Value); if (!urlRegex.IsMatch(returnUrl)) { return new APIGatewayProxyResponse { StatusCode = 403 } } ; var clientSecrets = new ClientSecrets { ClientId = googleOauthClientId.Parameter.Value, ClientSecret = googleOauthClientSecret.Parameter.Value }; var authorisationFlow = new GoogleAuthorizationCodeFlow(new GoogleAuthorizationCodeFlow.Initializer { ClientSecrets = clientSecrets, Scopes = new[] { "email" }, UserDefinedQueryParams = new[] { new KeyValuePair <string, string>("hd", "myunidays.com") } }); var authorisationApp = new AuthorizationCodeWebApp(authorisationFlow, "https://" + input.Headers["Host"] + "/Prod/google-oauth/callback", JsonConvert.SerializeObject(new { returnUrl, state = input.QueryStringParameters["state"] })); var result = await authorisationApp.AuthorizeAsync(string.Empty, CancellationToken.None); var location = result.RedirectUri; return(new APIGatewayProxyResponse { StatusCode = 303, Headers = new Dictionary <string, string> { ["Access-Control-Allow-Origin"] = "*", ["Location"] = location } }); } }
public static CalendarService GetCalendarService(GoogleTokenModel GoogleTokenModelObj) { CalendarService service = null; IAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow( new GoogleAuthorizationCodeFlow.Initializer { ClientSecrets = GetClientConfiguration().Secrets, DataStore = new FileDataStore(gFolder), Scopes = new[] { CalendarService.Scope.Calendar } }); var uri = /*"http://localhost:19594/GoogleCalendarRegistration.aspx";*/ System.Web.HttpContext.Current.Request.Url.ToString(); var code = System.Web.HttpContext.Current.Request["code"]; if (code != null) { var token = flow.ExchangeCodeForTokenAsync(UserId, code, uri.Substring(0, uri.IndexOf("?")), CancellationToken.None).Result; // Extract the right state. var oauthState = AuthWebUtility.ExtracRedirectFromState( flow.DataStore, UserId, HttpContext.Current.Request["state"]).Result; System.Web.HttpContext.Current.Response.Redirect(oauthState); } else { var result = new AuthorizationCodeWebApp(flow, uri, uri).AuthorizeAsync(UserId, CancellationToken.None).Result; if (result.RedirectUri != null) { // Redirect the user to the authorization server. System.Web.HttpContext.Current.Response.Redirect(result.RedirectUri); //var page = System.Web.HttpContext.Current.CurrentHandler as Page; //page.ClientScript.RegisterClientScriptBlock(page.GetType(), // "RedirectToGoogleScript", "window.top.location = '" + result.RedirectUri + "'", true); } else { // The data store contains the user credential, so the user has been already authenticated. service = new CalendarService(new BaseClientService.Initializer { ApplicationName = "My ASP.NET Google Calendar App", HttpClientInitializer = result.Credential }); } } return(service); }
private DriveService CreateDriveService() { DriveService service = null; string UserId = "user-id"; GoogleAuthorizationCodeFlow flow; using (var stream = new FileStream(Server.MapPath(@"/client_secrets.json"), FileMode.Open, FileAccess.Read)) { flow = new GoogleAuthorizationCodeFlow(new GoogleAuthorizationCodeFlow.Initializer { DataStore = new FileDataStore(Server.MapPath(@"/Drive.Sample.Store")), ClientSecretsStream = stream, Scopes = new[] { DriveService.Scope.Drive } }); } var uri = Request.Url.ToString(); var code = Request["code"]; if (code != null) { var token = flow.ExchangeCodeForTokenAsync(UserId, code, uri.Substring(0, uri.IndexOf("?")), CancellationToken.None).Result; // Extract the right state. var oauthState = AuthWebUtility.ExtracRedirectFromState( flow.DataStore, UserId, Request["state"]).Result; Response.Redirect(oauthState); } else { var result = new AuthorizationCodeWebApp(flow, uri, uri).AuthorizeAsync(UserId, CancellationToken.None).Result; if (result.RedirectUri != null) { // Redirect the user to the authorization server. Response.Redirect(result.RedirectUri); } else { // The data store contains the user credential, so the user has been already authenticated. service = new DriveService(new BaseClientService.Initializer { ApplicationName = "Google Drive API", HttpClientInitializer = result.Credential }); } } return(service); }
protected void Page_Load(object sender, EventArgs e) { GoogleAuthorizationCodeFlow flow; var assembly = Assembly.GetExecutingAssembly(); using (var stream = assembly.GetManifestResourceStream("Tasks.ASP.NET.SimpleOAuth2.client_secrets.json")) { flow = new GoogleAuthorizationCodeFlow(new GoogleAuthorizationCodeFlow.Initializer { DataStore = new FileDataStore("Tasks.ASP.NET.Sample.Store"), ClientSecretsStream = stream, Scopes = new[] { TasksService.Scope.TasksReadonly } }); } var uri = Request.Url.ToString(); var code = Request["code"]; if (code != null) { var token = flow.ExchangeCodeForTokenAsync(UserId, code, uri.Substring(0, uri.IndexOf("?")), CancellationToken.None).Result; // Extract the right state. var oauthState = AuthWebUtility.ExtracRedirectFromState( flow.DataStore, UserId, Request["state"]).Result; Response.Redirect(oauthState); } else { var result = new AuthorizationCodeWebApp(flow, uri, uri).AuthorizeAsync(UserId, CancellationToken.None).Result; if (result.RedirectUri != null) { // Redirect the user to the authorization server. Response.Redirect(result.RedirectUri); } else { // The data store contains the user credential, so the user has been already authenticated. service = new TasksService(new BaseClientService.Initializer { ApplicationName = "Tasks API Sample", HttpClientInitializer = result.Credential }); } } }
protected void BtnRegisterWithGoogleCalendar_Click(object sender, EventArgs e) { CalendarService service = null; //string GoogleReturnPageAddress = System.Configuration.ConfigurationManager.AppSettings["GoogleReturnPageAddress"]; IAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow( new GoogleAuthorizationCodeFlow.Initializer { ClientSecrets = GetClientConfiguration().Secrets, DataStore = new FileDataStore(gFolder), Scopes = new[] { CalendarService.Scope.Calendar } }); var uri = System.Web.HttpContext.Current.Request.Url.ToString(); var result = new AuthorizationCodeWebApp(flow, uri, uri).AuthorizeAsync(UserId, CancellationToken.None).Result; if (result.RedirectUri != null) { // Redirect the user to the authorization server. System.Web.HttpContext.Current.Response.Redirect(result.RedirectUri); var page = System.Web.HttpContext.Current.CurrentHandler as Page; page.ClientScript.RegisterClientScriptBlock(page.GetType(), "RedirectToGoogleScript", "window.top.location = '" + result.RedirectUri + "'", true); } else if (result.Credential != null) { // The data store contains the user credential, so the user has been already authenticated. service = new CalendarService(new BaseClientService.Initializer { ApplicationName = "My ASP.NET Google Calendar App", HttpClientInitializer = result.Credential }); PnlLogin.Visible = false; PnlRegister.Visible = false; PnlEvents.Visible = true; TxtStartTime.Text = DateTime.Now.ToString(); TxtEndTime.Text = DateTime.Now.AddHours(2).ToString(); } // Response.Redirect(GoogleCalendarManager.GenerateGoogleOAuthURL()); }
/// <summary> /// Verifica se o usuário está logado no Google Calendar /// </summary> /// <param name="usuarioID">ID do usuário no sistema</param> /// <param name="conexaoBanco">Conexão com banco de dados</param> /// <param name="urlRedirecionamento">Url de redirecionamento definida no Google Console Developers</param> /// <param name="aplicacaoNome">Nome da aplicação no google</param> /// <param name="escopos">Acessos que o sistema irá solicitar ao usuário</param> /// <returns>Caso esteja logado retorna o serviço para ser usado, se não retorna null</returns> public static CalendarService OAuthLogged(string usuarioID, string conexaoBanco, string urlRedirecionamento, string aplicacaoNome, string[] escopos) { CalendarService service = new CalendarService(); //Use uma classe extendida para autenticação Google Flow GoogleAuthorizationCodeFlow flow; flow = new ForceOfflineGoogleAuthorizationCodeFlow( new GoogleAuthorizationCodeFlow.Initializer { //Classe GoogleDAO para salvar o token de acesso no banco de dados. DataStore = new GoogleDAO(conexaoBanco), ClientSecrets = new ClientSecrets { ClientId = "215187720738-qvd9a4kbm69cqd5iuutgekhspg67l8ar.apps.googleusercontent.com", ClientSecret = "96JWX7tgheXLn1pe5QJw968E" }, Scopes = escopos }); var dados = new AuthorizationCodeWebApp(flow, urlRedirecionamento, Convert.ToString(HttpContext.Current.Request.Url)).AuthorizeAsync(usuarioID, CancellationToken.None).Result; if (dados.RedirectUri == null) { //Caso já exista no banco de dados o token o usuário já possui permissão e está logado. service = new CalendarService ( new BaseClientService.Initializer() { HttpClientInitializer = dados.Credential, ApplicationName = aplicacaoNome } ); return(service); } return(null); }
// API protected void GmailAPI(object sender, EventArgs e) { String credPath = System.Web.HttpContext.Current.Server.MapPath("/App_Data/GmailAPI"); String uri = Request.Url.ToString(); String user_id = Util.GetUserId(); IAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow( new GoogleAuthorizationCodeFlow.Initializer { ClientSecrets = new ClientSecrets() { ClientId = "792417557967-mbt9n0cvnnlm01947sh1om351nd9quku.apps.googleusercontent.com", ClientSecret = "9lo8IshXhyIMy8_5jd6YoCNd" }, DataStore = new FileDataStore(credPath, true), Scopes = new String[] { GmailService.Scope.GmailReadonly } }); var code = Request["code"]; if (String.IsNullOrEmpty(code)) { AuthorizationCodeWebApp.AuthResult AuthResult = new AuthorizationCodeWebApp(flow, uri, uri).AuthorizeAsync(user_id, CancellationToken.None).Result; Util.Debug(AuthResult.RedirectUri); if (AuthResult.RedirectUri != null) { // Redirect the user to the authorization server. Page.ClientScript.RegisterStartupScript(this.GetType(), "OpenWindow", "window.open('" + AuthResult.RedirectUri + "','_newtab');", true); } else { // Create Gmail API service. GmailService service = new GmailService(new BaseClientService.Initializer() { HttpClientInitializer = AuthResult.Credential, ApplicationName = "My Project" }); // Define parameters of request. UsersResource.LabelsResource.ListRequest request = service.Users.Labels.List("me"); // List labels. IList <Google.Apis.Gmail.v1.Data.Label> labels = request.Execute().Labels; Response.Write("Labels:"); if (labels != null && labels.Count > 0) { foreach (var labelItem in labels) { Response.Write(" " + labelItem.Name); } } else { Response.Write("No labels found."); } } } else { var token = flow.ExchangeCodeForTokenAsync(user_id, code, uri.Substring(0, uri.IndexOf("?")), CancellationToken.None).Result; // Extract the right state. var oauthState = AuthWebUtility.ExtracRedirectFromState(flow.DataStore, user_id, Request["state"]).Result; Page.ClientScript.RegisterStartupScript(this.GetType(), "OpenWindow", "window.open('" + oauthState + "','_newtab');", true); } }
public AnalyticsService Handle(string _userId, string _connectionString, string _googleRedirectUri, string _applicationName, string[] _scopes) { try { string UserId = _userId;//The user ID wil be for examlpe the users gmail address. AnalyticsService service; GoogleAuthorizationCodeFlow flow; //use extended class to create google authorization code flow flow = new ForceOfflineGoogleAuthorizationCodeFlow(new GoogleAuthorizationCodeFlow.Initializer { DataStore = new DbDataStore(_connectionString),//DataStore class to save the token in a SQL database. ClientSecrets = new ClientSecrets { ClientId = "XXX-YOUR CLIENTID-XXX", ClientSecret = "XXX-YOURCLIENTSECRET-XXX" }, Scopes = _scopes, }); var uri = HttpContext.Current.Request.Url.ToString(); string redirecturi = _googleRedirectUri; //This is the redirect URL set in google developer console. var code = HttpContext.Current.Request["code"]; if (code != null) { var token = flow.ExchangeCodeForTokenAsync(UserId, code, uri.Substring(0, uri.IndexOf("?")), CancellationToken.None).Result; var test = HttpContext.Current.Request["state"]; // Extract the right state. var oauthState = AuthWebUtility.ExtracRedirectFromState( flow.DataStore, UserId, HttpContext.Current.Request["state"]).Result; HttpContext.Current.Response.Redirect(oauthState); } else { var result = new AuthorizationCodeWebApp(flow, redirecturi, uri).AuthorizeAsync(UserId, CancellationToken.None).Result; if (result.RedirectUri != null) { // Redirect the user to the authorization server. HttpContext.Current.Response.Redirect(result.RedirectUri); } else { // The data store contains the user credential, so the user has been already authenticated. service = new AnalyticsService(new BaseClientService.Initializer() { HttpClientInitializer = result.Credential, ApplicationName = _applicationName }); return(service); } } return(null); } catch (Exception ex) { throw ex; } }
protected void Page_Load(object sender, EventArgs e) { GoogleAuthorizationCodeFlow flow; using (var stream = GetGoogleSettings()) { flow = new GoogleAuthorizationCodeFlow(new GoogleAuthorizationCodeFlow.Initializer { ClientSecretsStream = stream, Scopes = new[] { "https://www.googleapis.com/auth/userinfo.profile", "https://www.googleapis.com/auth/userinfo.email" } }); } var uri = Request.Url.ToString(); var code = Request["code"]; if (code != null) { var token = flow.ExchangeCodeForTokenAsync("user-id", code, uri.Substring(0, uri.IndexOf("?")), CancellationToken.None).Result; string access_token = (string)token.AccessToken; int statusCode = -1; String strUrl = "https://www.googleapis.com/oauth2/v1/userinfo?access_token=" + access_token; var request = WebRequest.Create(strUrl) as HttpWebRequest; using (HttpWebResponse res = (HttpWebResponse)request.GetResponse() as HttpWebResponse) { statusCode = (int)res.StatusCode; using (Stream dataStream = res.GetResponseStream()) { StreamReader sr = new StreamReader(dataStream); var serializer = new JavaScriptSerializer(); string s = sr.ReadToEnd(); AccountData accountData = serializer.Deserialize <AccountData>(s); if (Membership.GetUser(accountData.email) == null) { Session["GoogleUserFirstName"] = accountData.name; Session["GoogleUserLastName"] = ""; Session["GoogleUserEmail"] = accountData.email; Session["CameFromSocialNetwork"] = true; Session["CameFromGoogleLogin"] = true; var redirect = this.BaseUrl + "/DesktopModules/CoreModules/Register/Register.aspx"; StringBuilder sb = new StringBuilder(); sb.Append("<script language='javascript'>"); sb.Append("window.opener.location.href = '"); sb.Append(redirect); sb.Append("';window.opener.focus();"); sb.Append("window.close();"); sb.Append("</script>"); Response.Write(sb.ToString()); Response.End(); } else { Session["CameFromSocialNetwork"] = true; Session["UserName"] = accountData.email; var redirect = BaseUrl + "/DesktopModules/CoreModules/SignIn/LoginIn.aspx"; StringBuilder sb = new StringBuilder(); sb.Append("<script language='javascript'>"); sb.Append("window.opener.location.href = '"); sb.Append(redirect); sb.Append("';window.opener.focus();"); sb.Append("window.close();"); sb.Append("</script>"); Response.Write(sb.ToString()); Response.End(); } } } } else { var result = new AuthorizationCodeWebApp(flow, this.RedirectUrl, this.RedirectUrl).AuthorizeAsync("user-id", CancellationToken.None).Result; if (result.RedirectUri != null) { // Redirect the user to the authorization server. Response.Redirect(result.RedirectUri); } else { Response.Redirect("/"); } } // Metodo viejo que anda //if (Session["GoogleAppId"] != null && Session["GoogleAppSecret"] != null) { //try { // string code = Request.QueryString["code"]; // string url = "https://accounts.google.com/o/oauth2/token"; // string appId = Session["GoogleAppId"] as string; // string appSecret = Session["GoogleAppSecret"] as string; // string redirectUrl = ConvertRelativeUrlToAbsoluteUrl(HttpUrlBuilder.BuildUrl("~/DesktopModules/CoreModules/SignIn/LogInGoogle.aspx")); // StringBuilder postData = new StringBuilder(); // postData.Append("code=" + code + "&"); // postData.Append("client_id=" + appId + "&"); // postData.Append("client_secret=" + appSecret + "&"); // postData.Append("redirect_uri=" + redirectUrl + "&"); // postData.Append("grant_type=authorization_code"); // //ETC for all Form Elements // // Now to Send Data. // StreamWriter writer = null; // HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); // request.Method = "POST"; // request.ContentType = "application/x-www-form-urlencoded"; // request.ContentLength = postData.ToString().Length; // try { // writer = new StreamWriter(request.GetRequestStream()); // writer.Write(postData.ToString()); // } // finally { // if (writer != null) // writer.Close(); // } // WebResponse response = request.GetResponse(); // StreamReader sr = new StreamReader(response.GetResponseStream()); // String json = sr.ReadToEnd().Trim(); // JavaScriptSerializer ser = new JavaScriptSerializer(); // var profileDic = ser.Deserialize<Dictionary<string, object>>(json); // string access_token = (string)profileDic["access_token"]; // var refresh_token = profileDic["refresh_token"]; // int statusCode = -1; // String strUrl = "https://www.google.com/m8/feeds/contacts/default/full?access_token=" + access_token; // request = WebRequest.Create(strUrl) as HttpWebRequest; // using (HttpWebResponse res = (HttpWebResponse)request.GetResponse() as HttpWebResponse) { // statusCode = (int)res.StatusCode; // using (Stream dataStream = res.GetResponseStream()) { // var resp = XDocument.Load(dataStream); // XNamespace atom = "http://www.w3.org/2005/Atom"; // var q = from c in resp.Root.Descendants(atom + "author") // select new { // Name = (string)c.Element(atom + "name"), // Email = (string)c.Element(atom + "email") // }; // string name = string.Empty; // string email = string.Empty; // foreach (var person in q) { // name = person.Name; // email = person.Email; // } // if (Membership.GetUser(email) == null){ // Session["GoogleUserName"] = name; // Session["GoogleUserEmail"] = email; // Session["CameFromSocialNetwork"] = true; // Session["CameFromGoogleLogin"] = true; // Response.Redirect(HttpUrlBuilder.BuildUrl("~/DesktopModules/CoreModules/Register/Register.aspx")); // } // else{ // string urlHome = ConvertRelativeUrlToAbsoluteUrl("~"); // Session["CameFromSocialNetwork"] = true; // PortalSecurity.SignOn(email, GeneratePasswordHash(email), false, urlHome); // } // } // } // } // catch (Exception ex) { // ErrorHandler.Publish(LogLevel.Error, "Google error ocurred", ex); // Response.Redirect(HttpUrlBuilder.BuildUrl("")); // } //} //else{ // ErrorHandler.Publish(LogLevel.Error,"Google settings weren't loaded."); // Response.Redirect(HttpUrlBuilder.BuildUrl("")); //} OpenIdRelyingParty Openid = new OpenIdRelyingParty(); var openIdUrl = "http://www.google.com/accounts/o8/id"; var response = Openid.GetResponse(); if (response == null) { // User submitting Identifier Identifier id; if (Identifier.TryParse(openIdUrl, out id)) { try { var request = Openid.CreateRequest(openIdUrl); var fetch = new FetchRequest(); fetch.Attributes.AddRequired(WellKnownAttributes.Contact.Email); fetch.Attributes.AddRequired(WellKnownAttributes.Name.First); fetch.Attributes.AddRequired(WellKnownAttributes.Name.Last); request.AddExtension(fetch); request.AddExtension(new UIRequest() { Mode = UIModes.Popup }); var b = new UriBuilder(Request.Url) { Query = "" }; request.RedirectToProvider(); } catch (ProtocolException ex) { ErrorHandler.Publish(LogLevel.Error, "Google Error", ex); Response.Redirect(HttpUrlBuilder.BuildUrl("~/")); } } ErrorHandler.Publish(LogLevel.Error, "OpenID Error...invalid url. url='" + openIdUrl + "'"); Response.Redirect(HttpUrlBuilder.BuildUrl("~/")); } // OpenID Provider sending assertion response switch (response.Status) { case AuthenticationStatus.Authenticated: var fetch = response.GetExtension <FetchResponse>(); string firstName = "unknown"; string lastName = "unknown"; string email = "unknown"; if (fetch != null) { firstName = fetch.GetAttributeValue(WellKnownAttributes.Name.First); lastName = fetch.GetAttributeValue(WellKnownAttributes.Name.Last); email = fetch.GetAttributeValue(WellKnownAttributes.Contact.Email); } if (Membership.GetUser(email) == null) { Session["GoogleUserFirstName"] = firstName; Session["GoogleUserLastName"] = lastName; Session["GoogleUserEmail"] = email; Session["CameFromSocialNetwork"] = true; Session["CameFromGoogleLogin"] = true; var redirect = ConvertRelativeUrlToAbsoluteUrl(HttpUrlBuilder.BuildUrl("~/DesktopModules/CoreModules/Register/Register.aspx")); StringBuilder sb = new StringBuilder(); sb.Append("<script language='javascript'>"); sb.Append("window.opener.location.href = '"); sb.Append(redirect); sb.Append("';window.opener.focus();"); sb.Append("window.close();"); sb.Append("</script>"); Response.Write(sb.ToString()); Response.End(); } else { Session["CameFromSocialNetwork"] = true; Session["UserName"] = email; var redirect = ConvertRelativeUrlToAbsoluteUrl(HttpUrlBuilder.BuildUrl("~/DesktopModules/CoreModules/SignIn/LoginIn.aspx")); StringBuilder sb = new StringBuilder(); sb.Append("<script language='javascript'>"); sb.Append("window.opener.location.href = '"); sb.Append(redirect); sb.Append("';window.opener.focus();"); sb.Append("window.close();"); sb.Append("</script>"); Response.Write(sb.ToString()); Response.End(); } break; case AuthenticationStatus.Canceled: ErrorHandler.Publish(LogLevel.Info, "OpenID: Cancelled at provider."); Response.Write("<script language=javascript>close();</script>"); Response.End(); Response.Redirect(HttpUrlBuilder.BuildUrl("~/")); break; case AuthenticationStatus.Failed: ErrorHandler.Publish(LogLevel.Error, "OpenID Exception...", response.Exception); Response.Write("<script language=javascript>close();</script>"); Response.End(); Response.Redirect(HttpUrlBuilder.BuildUrl("~/")); break; } Response.Redirect(HttpUrlBuilder.BuildUrl("~/")); }
/// <summary> /// Efetua login OAuth no google e grava dados em banco de dados para não precisar ficar logando a cada acesso /// </summary> /// <param name="usuarioID">ID do usuário que está logando</param> /// <param name="conexaoBanco">String de conexão com banco de dados</param> /// <param name="urlRedirecionamento">URL que o google irá redirecionar de volta após o Login</param> /// <param name="aplicacaoNome">Nome da aplicação no google console developer</param> /// <param name="escopos">Escopos que definem o que será usado do serviço</param> /// <returns>Retorna o serviço que será usado</returns> public static CalendarService OAuthLogin(string usuarioID, string conexaoBanco, string urlRedirecionamento, string aplicacaoNome, string[] escopos) { try { CalendarService service = new CalendarService(); //Use uma classe extendida para autenticação Google Flow GoogleAuthorizationCodeFlow flow; flow = new ForceOfflineGoogleAuthorizationCodeFlow( new GoogleAuthorizationCodeFlow.Initializer { //Classe GoogleDAO para salvar o token de acesso no banco de dados. DataStore = new GoogleDAO(conexaoBanco), ClientSecrets = new ClientSecrets { ClientId = "215187720738-qvd9a4kbm69cqd5iuutgekhspg67l8ar.apps.googleusercontent.com", ClientSecret = "96JWX7tgheXLn1pe5QJw968E" }, Scopes = escopos }); var uri = Convert.ToString(HttpContext.Current.Request.Url); //URL de redirecionamento configurada no painel do google developers console. string uriRedirecionamento = urlRedirecionamento; if (HttpContext.Current.Request["code"] != null) { var token = flow.ExchangeCodeForTokenAsync(usuarioID, HttpContext.Current.Request["code"], uri.Substring(0, uri.IndexOf("?")), CancellationToken.None).Result; // Extrai dados salvos. var oauthState = AuthWebUtility.ExtracRedirectFromState(flow.DataStore, usuarioID, HttpContext.Current.Request["state"]).Result; var dados = new AuthorizationCodeWebApp(flow, uriRedirecionamento, uri).AuthorizeAsync(usuarioID, CancellationToken.None).Result; //Caso já exista no banco de dados o token, o usuário já possui permissão e está logado. service = new CalendarService ( new BaseClientService.Initializer() { HttpClientInitializer = dados.Credential, ApplicationName = aplicacaoNome } ); return(service); } else { var dados = new AuthorizationCodeWebApp(flow, uriRedirecionamento, uri).AuthorizeAsync(usuarioID, CancellationToken.None).Result; if (dados.RedirectUri != null) { //Redireciona o usuário para fazer login e dar as permissões HttpContext.Current.Response.Redirect(dados.RedirectUri); } else { //Caso já exista no banco de dados o token, o usuário já possui permissão e está logado. service = new CalendarService ( new BaseClientService.Initializer() { HttpClientInitializer = dados.Credential, ApplicationName = aplicacaoNome } ); return(service); } } return(null); } catch (Exception ex) { throw ex; } }