Получение 401 Youtube C # API с Google Secure AuthSub - PullRequest
0 голосов
/ 07 февраля 2012

Моя проблема возникает после получения токена сеанса от Google БЕЗОПАСНО

Вот что я сделал.1) Получить одноразовый токен

string authSubUrl = AuthSubUtil.getRequestUrl("https://some.com/mypage.aspx", "http://gdata.youtube.com", true, true);
Response.Redirect(authSubUrl);

2) Обмен на сеансовый токен

Session["YT_Token"] = AuthSubUtil.exchangeForSessionToken(Request.QueryString["token"], getRsaKey());

Функция getRsaKey () найдена в Использование AuthSub с клиентской библиотекой .NET

3) Сделайте запрос на YouTube

YouTubeRequestSettings settings = new YouTubeRequestSettings("my app name", "Google.Client.ID", "Google.Youtube.DeveloperKey", (string)Session["YT_Token"]);
YouTubeRequest ytRequest = new YouTubeRequest(settings);
...
Video newVideo = new Video();
newVideo.Title = "blah";
newVideo.Tags.Add(new MediaCategory("People", YouTubeNameTable.CategorySchema));
newVideo.Description = "des";
newVideo.YouTubeEntry.Private = true;
FormUploadToken formToken = ytRequest.CreateFormUploadToken(newVideo);

Здесь я получаю сообщение об ошибке.На ytRequest.CreateFormUploadToken.Я получаю это

Execution of request failed: http://gdata.youtube.com/action/GetUploadToken Google.GData.Client.GDataRequestException: Execution of request failed: http://gdata.youtube.com/action/GetUploadToken ---> System.Net.WebException: The remote server returned an error: (401) Unauthorized. at System.Net.HttpWebRequest.GetResponse() 
ResponseString is yt:authenticationUnknown

Код работает нормально, если я НЕ использую безопасный AuthSub (то есть, устанавливаю для secure значение false на шаге 1 и ноль вместо getRsaKey () на шаге 2).Может кто-нибудь сказать мне, что мне не хватает?

Большое спасибо!

1 Ответ

1 голос
/ 10 февраля 2012

Решение найдено, но есть еще одна маленькая проблема.Решение, найденное на http://code.google.com/p/google-gdata/issues/detail?id=393, не так очевидно.

Шаг 3 должен выглядеть следующим образом 3) Сделайте запрос YouTube

YouTubeRequestSettings settings = new YouTubeRequestSettings("my app name", "Google.Client.ID", "Google.Youtube.DeveloperKey", (string)Session["YT_Token"]);
YouTubeRequest ytRequest = new YouTubeRequest(settings);
ytRequest.Service.RequestFactory =
                new GAuthSubRequestFactory("youtube", "my app name")
                { PrivateKey = getRsaKey(), Token = (string)Session["YT_Token"] };
...
Video newVideo = new Video();
...
FormUploadToken formToken = ytRequest.CreateFormUploadToken(newVideo);
Form.Action = formToken.Url.Replace("http://", "https://") + "?nexturl=some page";

Обратите внимание на последнюю строку.formToken.Url всегда небезопасен.Как получить защищенный URL-адрес для загрузки без необходимости его замены вручную?

...