0

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() は、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 でセキュアを false に設定し、ステップ 2 で getRsaKey() の代わりに null を設定)、コードは正常に機能します。誰かが私に欠けているものを教えてもらえますか?

本当にありがとう!

4

1 に答える 1

1

解決策は見つかりましたが、まだ1つの小さな問題があります。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を取得するにはどうすればよいですか?

于 2012-02-10T01:46:00.160 に答える