2016-03-16 5 views
0

Я использую следующий код, чтобы получить authoriziation и загрузить на YouTube:YouTube API. Validate Refresh Токен перед загрузкой

Я просил мою фишку от Google, и пользователь вошел в системе, и я получил мое разрешение на маркере обратно.

я променял это для маркера обновления и доступа, используя следующие:

using (WebClient client = new WebClient()) 
      { 

       byte[] response = 
        client.UploadValues("https://accounts.google.com/o/oauth2/token", new NameValueCollection() 
         { 
          {"code", Session["authCode"].ToString()}, 
          {"redirect_uri", "http://YouTubeTest.org/testpage.aspx"}, 
          { 
           "client_id", clientID 
          }, 
          {"client_secret", secret}, 
          {"grant_type", "authorization_code"} 
         }); 


       string result =Encoding.UTF8.GetString(response); 
       XElement node = XElement.Parse(JsonConvert.DeserializeXNode(result, "Root").ToString()); 
       Session["refreshtoken"] = node.Element("refresh_token").Value; 
      } 

Эти данные затем сохраняются.

Когда пользователь нажимает кнопку, чтобы загрузить видео, которое я Инициализируемы услуги YouTube следующим образом:

ClientSecrets secrets = new ClientSecrets() 
      { 
       ClientId = CLIENT_ID, 
       ClientSecret = CLIENT_SECRET 
      }; 

      var token = new TokenResponse { RefreshToken = REFRESH_TOKEN }; 

      var credentials = new UserCredential(new GoogleAuthorizationCodeFlow(
       new GoogleAuthorizationCodeFlow.Initializer 
       { 
        ClientSecrets = secrets 
       }), 
       "user", 
       token); 

      var service = new YouTubeService(new BaseClientService.Initializer() 
      { 
       HttpClientInitializer = credentials, 
       ApplicationName = "TestProject" 
      }); 

В этот момент я хотел бы знать, если маркер обновления я послал более справедливо, но Безразлично» Кажется, это какой-то способ рассказать.

Единственный способ, которым я, кажется, знаю, когда я на самом деле попробовать и загрузить видео, выполнив следующие действия:

public String UploadVideo(Stream stream, String title, String desc, String[] tags, String categoryId, Boolean isPublic) 
     { 
      var video = new Video(); 
      video.Snippet = new VideoSnippet(); 
      video.Snippet.Title = title; 
      video.Snippet.Description = desc; 
      video.Snippet.Tags = tags; 
      video.Snippet.CategoryId = categoryId; // See https://developers.google.com/youtube/v3/docs/videoCategories/list 
      video.Status = new VideoStatus(); 
      video.Status.PrivacyStatus = isPublic ? "public" : "private"; 


      var videosInsertRequest = youtube.Videos.Insert(video, "snippet,status", stream, "video/*"); 
      videosInsertRequest.ProgressChanged += insertRequest_ProgressChanged; 
      videosInsertRequest.ResponseReceived += insertRequest_ResponseReceived; 
      videosInsertRequest.Upload(); 

      return UploadedVideoId; 
     } 

    void insertRequest_ResponseReceived(Video video) 
     { 
      UploadedVideoId = video.Id; 
     } 

     void insertRequest_ProgressChanged(Google.Apis.Upload.IUploadProgress progress) 
     { 
      // You can handle several status messages here. 
      switch (progress.Status) 
      { 
       case UploadStatus.Failed: 
        UploadedVideoId = "FAILED"; 

^^ Если маркер является недействительным в данный момент прогресс имеет исключение с " Invalid_grant»

    break; 
       case UploadStatus.Completed: 
        break; 
       default: 
        break; 
      } 
     } 

Как узнать, прежде чем я попробовать загрузку, если маркер обновления у меня действует?

С этой точки зрения трудно восстановить красиво, поэтому в идеале я хотел бы проверить это, когда или после того, как я инициализирую службу youtube.

ответ

0

Проверка токена является частью документации Google Identity. Это предполагает, что вы можете проверить токен, запросив в конечной точке веб-службы.

Вы можете позвонить https://www.googleapis.com/oauth2/v3/tokeninfo вместе с вашим access_token в качестве параметра

https://www.googleapis.com/oauth2/v3/tokeninfo?access_token=1/fFBGRNJru1FQd44AzqT3Zg

Ответ будет иметь объект JSON, который описывает маркер или сообщение об ошибке. Более подробную информацию об этом можно найти на ссылочной странице в приведенной выше документации.

Смежные вопросы