Reputation: 13
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!
Upvotes: 0
Views: 1472
Reputation: 13
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?
Upvotes: 1