Liborek

Google plus authentication Windows Phone

Oct 31st, 2013
276
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.95 KB | None | 0 0
  1.     void GooglePlusLoginPage_Loaded(object sender, RoutedEventArgs e)
  2.             {
  3.                 var url = "https://accounts.google.com/o/oauth2/auth?response_type=code&redirect_uri=" + RedirctedUri + "&scope=https://www.googleapis.com/auth/plus.login%20https://www.googleapis.com/auth/plus.me%20https://www.googleapis.com/auth/userinfo.email%20https://www.googleapis.com/auth/userinfo.profile&client_id=" + ClientId;
  4.                 webBrowserGooglePlusLogin.IsScriptEnabled = true;
  5.                 webBrowserGooglePlusLogin.Navigate(new Uri(url, UriKind.RelativeOrAbsolute));
  6.    
  7.             }
  8.    
  9.             private void webBrowserGooglePlusLogin_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e)
  10.             {
  11.                 webBrowserGooglePlusLogin.Visibility = Visibility.Visible;
  12.             }
  13.    
  14.             private void webBrowserGooglePlusLogin_Navigating(object sender, NavigatingEventArgs e)
  15.             {
  16.                 if (e.Uri.Host.Equals("localhost"))
  17.                 {
  18.                     webBrowserGooglePlusLogin.Visibility = Visibility.Collapsed;
  19.    
  20.                     e.Cancel = true;
  21.                     int pos = e.Uri.Query.IndexOf("=");
  22.    
  23.                     //get the access code
  24.                     string messageCode = pos > -1 ? e.Uri.Query.Substring(pos + 1) : null;
  25.    
  26.                     //when code is not equeals to null get the access token
  27.                     if (messageCode != null)
  28.                     {
  29.                         //get the access token
  30.                         Parameters = "code=" + messageCode + "&client_id=" + ClientId + "&client_secret=" + ClientSecret + "&redirect_uri=" + RedirctedUri + "&grant_type=authorization_code";
  31.                         HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create("https://accounts.google.com/o/oauth2/token");
  32.                         webRequest.Method = "POST";
  33.                         webRequest.ContentType = "application/x-www-form-urlencoded";
  34.    
  35.                         // Start web request
  36.                         webRequest.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), webRequest);
  37.                     }
  38.                 }
  39.             }
  40.            
  41.             void GetRequestStreamCallback(IAsyncResult asynchronousResult)
  42.             {
  43.                 try
  44.                 {
  45.                     HttpWebRequest webRequest = (HttpWebRequest)asynchronousResult.AsyncState;
  46.                     // End the stream request operation
  47.                     Stream postStream = webRequest.EndGetRequestStream(asynchronousResult);
  48.    
  49.    
  50.                     byte[] byteArray = Encoding.UTF8.GetBytes(Parameters);
  51.    
  52.                     // Add the post data to the web request
  53.                     postStream.Write(byteArray, 0, byteArray.Length);
  54.                     postStream.Close();
  55.    
  56.                     // Start the web request
  57.                     webRequest.BeginGetResponse(new AsyncCallback(GetResponseCallback), webRequest);
  58.                 }
  59.                 catch (WebException ex)
  60.                 {
  61.                 }
  62.    
  63.             }
  64.            
  65.             void GetResponseCallback(IAsyncResult asynchronousResult)
  66.             {
  67.                 try
  68.                 {
  69.                     var request = (HttpWebRequest)asynchronousResult.AsyncState;
  70.                     using (var resp = (HttpWebResponse)request.EndGetResponse(asynchronousResult))
  71.                     {
  72.                         using (var streamResponse = resp.GetResponseStream())
  73.                         {
  74.                             var GooglePlusSerializerData = new DataContractJsonSerializer(typeof(GooglePlusAccessToken));
  75.                             var GooglePlusProfileData = GooglePlusSerializerData.ReadObject(streamResponse) as GooglePlusAccessToken;
  76.                             this.Dispatcher.BeginInvoke(
  77.                                 (Action<GooglePlusAccessToken>)((GooglePlusUserData) =>
  78.                                 {
  79.    
  80.                                     //save the response
  81.                                     thisApp.AccessToken = googlePlusTokens.AccessToken = GooglePlusUserData.AccessToken;
  82.                                     thisApp.LoggedBy = "Google+";
  83.                                     googlePlusTokens.RefreshToken = GooglePlusUserData.RefreshToken;
  84.                                     googlePlusTokens.ExpiresIn = GooglePlusUserData.ExpiresIn;
  85.                                     googlePlusTokens.TokenType = GooglePlusUserData.TokenType;
  86.    
  87.    
  88.                                     // request user profile
  89.                                     //RequestForUserProfile();
  90.                                     NavigationService.GoBack();
  91.    
  92.                                 }), GooglePlusProfileData);
  93.    
  94.                         }
  95.                     }
  96.                 }
  97.                 catch (WebException ex)
  98.                 {
  99.    
  100.                 }
  101.             }
Add Comment
Please, Sign In to add comment