2016-08-09 66 views
0

Ich möchte Authentifizierung OAuth bekommen wie Login using Google OAuth 2.0 with C# Aber ich will nicht prompt Popup zur Authentifizierung i ohne Popup-Token direkt erhalten möchten ..Wie OAuth-Zugriffstoken in der Konsole ohne Authentifizierung Aufforderung

public ActionResult CodeLele() 
    { 
     if (Session.Contents.Count > 0) 
     { 
      if (Session["loginWith"] != null) 
      { 
       if (Session["loginWith"].ToString() == "google") 
       { 
        try 
        { 
         var url = Request.Url.Query; 
         if (url != "") 
         { 
          string queryString = url.ToString(); 
          char[] delimiterChars = { '=' }; 
          string[] words = queryString.Split(delimiterChars); 
          string code = words[1]; 

          if (code != null) 
          { 
           //get the access token 
           HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create("https://accounts.google.com/o/oauth2/token"); 
           webRequest.Method = "POST"; 
           Parameters = "code=" + code + "&client_id=" + googleplus_client_id + "&client_secret=" + googleplus_client_sceret + "&redirect_uri=" + googleplus_redirect_url + "&grant_type=authorization_code"; 
           byte[] byteArray = Encoding.UTF8.GetBytes(Parameters); 
           webRequest.ContentType = "application/x-www-form-urlencoded"; 
           webRequest.ContentLength = byteArray.Length; 
           Stream postStream = webRequest.GetRequestStream(); 
           // Add the post data to the web request 
           postStream.Write(byteArray, 0, byteArray.Length); 
           postStream.Close(); 

           WebResponse response = webRequest.GetResponse(); 
           postStream = response.GetResponseStream(); 
           StreamReader reader = new StreamReader(postStream); 
           string responseFromServer = reader.ReadToEnd(); 

           GooglePlusAccessToken serStatus = JsonConvert.DeserializeObject<GooglePlusAccessToken>(responseFromServer); 

           if (serStatus != null) 
           { 
            string accessToken = string.Empty; 
            accessToken = serStatus.access_token; 

            if (!string.IsNullOrEmpty(accessToken)) 
            { 
             // This is where you want to add the code if login is successful. 
             // getgoogleplususerdataSer(accessToken); 
            } 
            else 
            { } 
           } 
           else 
           { } 
          } 
          else 
          { } 
         } 
        } 
        catch (WebException ex) 
        { 
         try 
         { 
          var resp = new StreamReader(ex.Response.GetResponseStream()).ReadToEnd(); 

          dynamic obj = JsonConvert.DeserializeObject(resp); 
          //var messageFromServer = obj.error.message; 
          //return messageFromServer; 
          return obj.error_description; 
         } 
         catch (Exception exc) 
         { 
          throw exc; 
         } 
        } 
       } 
      } 
     } 
     return Content("done"); 
    } 
    public ActionResult JeClick() 


    { 
     var Googleurl = "https://accounts.google.com/o/oauth2/auth?response_type=code&redirect_uri=" + googleplus_redirect_url + "&scope=https://www.googleapis.com/auth/userinfo.email%20https://www.googleapis.com/auth/userinfo.profile&client_id=" + googleplus_client_id; 
     Session["loginWith"] = "google"; 
     return Redirect(Googleurl); 
    } 

Antwort

0

Im Anmeldefenster (Popup) fragen Sie den Benutzer, ob Sie auf seine Daten zugreifen können. Es gibt keine Möglichkeit, auf Benutzerdaten zuzugreifen, ohne den Benutzer zuerst zu fragen, ob Sie auf seine Daten zugreifen dürfen. So funktioniert Oauth2.

Wenn Sie auf Ihre eigenen Daten zugreifen, können Sie ein sogenanntes Dienstkonto verwenden. Service accounts sind vorautorisiert. Sie können das Dienstkonto und gewähren Sie ihm Zugriff auf Ihren Google-Kalender, können Sie ihm Zugriff auf einen Ordner in Google Drive geben. Dann können Sie sich mit dem Dienstkonto authentifizieren. Dienstkonten sind wie Dummy-Benutzer.

Mein Artikel über Dienstkonten: Google Developer service account

+0

aber das ist mein eigenes Konto, mit dem ich will Web-Shop-API zugreifen, Ich brauche nur Zugriffstoken und dass es einen Code benötigt, die zusammen mit schicken werden Umleitung URI –

+0

Dann sollten Sie in Abhängigkeit von der API, die Sie verwenden werden, in ein Verwenden von Dienstkonten schauen. – DaImTo

+0

Ich versuche so viele versuchen, aber ich bin nicht in der Lage, das Öffnen erlauben Popup zu beschränken –