0

从 Google SECURELY 获取会话令牌后出现我的问题

这就是我所做的。1) 获得一次性令牌

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

2) 兑换会话 Token

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

getRsaKey() 位于Using AuthSub with the .NET Client Library

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(即在步骤 1 中将 secure 设置为 false 并且在步骤 2 中将 getRsaKey() 设置为 null 而不是),则代码可以正常工作。有人可以告诉我我错过了什么吗?

非常感谢!

4

1 回答 1

1

找到了解决方案,但还有一个小问题。在http://code.google.com/p/google-gdata/issues/detail?id=393找到的解决方案,不是那么明显。

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?

于 2012-02-10T01:46:00.160 回答