Question

My problem occur after getting the session token from Google SECURELY

Here's what I have done. 1) Get one time token

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

2) Exchange for session Token

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

The getRsaKey() is found at Using AuthSub with the .NET Client Library

3) Make YouTube request

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);

This is where I get the error. At ytRequest.CreateFormUploadToken. I get this

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

The code works fine if I am NOT using a secure AuthSub (i.e. setting secure to false in step 1 and null instead of getRsaKey() in step 2). Can somebody tell me what I am missing?

Thanks so much!

Was it helpful?

Solution

Solution found but there's still one small problem. Solution found at http://code.google.com/p/google-gdata/issues/detail?id=393 , it's not that obvious.

Step 3 should look like this 3) Make YouTube request

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";

Notice the last line. formToken.Url is always insecure. How can I get the secure upload url without having to replace it manually?

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top