2015-04-16 2 views
1

J'essaie d'utiliser OAuth 2 dans mon application Asp.net (C#). Le problème est que je dois utiliser un compte google partagé. Pour ce faire, mon plan consiste à initialiser l'authentification avec un jeton, une date d'expiration et un jeton d'actualisation, puis, lorsque l'authentification est requise, je vérifie la date d'expiration et utilise le jeton d'actualisation.Comment obtenir un jeton d'actualisation Google Api OAuth 2 pour mon application Web asp.net?

L'exemple que je l'ai utilisé pour l'authentification ressemble à ceci:

UserCredential credential; 
    using (var stream = new FileStream("client_secrets.json", FileMode.Open, FileAccess.Read)) 
    { 
     credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
      GoogleClientSecrets.Load(stream).Secrets, 
      // This OAuth 2.0 access scope allows an application to upload files to the 
      // authenticated user's YouTube channel, but doesn't allow other types of access. 
      new[] { YouTubeService.Scope.YoutubeUpload }, 
      "user", 
      CancellationToken.None 
     ); 
    } 

Et ne semble pas contenir un objet avec un jeton de rafraîchissement. Comment obtenir le jeton Refresh et la date d'expiration?

Répondre

4

La solution consistait à effectuer une action de publication et à analyser les résultats manuellement au lieu d'utiliser l'une des classes Google.

 string gurl = "code=" + code + "&client_id=" + client_id + 
       "&client_secret=" + client_secret + "&redirect_uri=" + redirect_uri + "&grant_type=" + grant_type; 

     string url = "https://www.googleapis.com/oauth2/v3/token"; 

     // creates the post data for the POST request 
     string postData = (gurl); 

     // create the POST request 
     HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url); 
     webRequest.Host ="www.googleapis.com"; 

     webRequest.Method = "POST"; 
     webRequest.ContentType = "application/x-www-form-urlencoded"; 
     webRequest.ContentLength = postData.Length; 

     // POST the data 
     using (StreamWriter requestWriter2 = new StreamWriter(webRequest.GetRequestStream())) 
     { 
      requestWriter2.Write(postData); 
     } 

     //This actually does the request and gets the response back 
     HttpWebResponse resp = (HttpWebResponse)webRequest.GetResponse(); 

     string googleAuth; 

     using (StreamReader responseReader = new StreamReader(webRequest.GetResponse().GetResponseStream())) 
     { 
      //dumps the HTML from the response into a string variable 
      googleAuth = responseReader.ReadToEnd(); 
     } 

De là, j'ai surtout besoin d'analyser la chaîne googleAuth pour obtenir au jeton, le jeton Refresh, et la période d'expiration. Je m'attendais à ce qu'il y ait une solution dans les classes de Google pour ce qui doit être une requête incroyablement commune, mais apparemment je vais créer ma propre classe.

+0

devrais-je stocker ce access_token? bcz chacun générera un nouveau access_token. – dilipkumar1007