4

こんにちは、主に認証手順で、Google ドライブ SDK へのアクセスに問題があります。

.Net Web アプリに と の 2 つのメイン ページがDefault.aspx.csありWebForm1.aspx.csます。ユーザーがリンクをクリックしたときにユーザーをに連れDefault.aspxhyperlink行くコントロールがあります:Google authentication page

https://accounts.google.com/o/oauth2/auth?response_type=code&scope=https://www.googleapis.com/auth/drive.file+https://www.googleapis.com/auth/userinfo.email+https://www.googleapis.com/auth/userinfo.profile&redirect_uri=http://localhost/GoogleDriveTest/GoogleDriveTest/GoogleDriveTest/WebForm1.aspx&state=/profile&client_id=*CLIENT_ID*&approval_prompt=force

REDIRECT_URIユーザーが( ) にリダイレクトされたら、WebForm1次のコードを使用してコードにアクセスしauthorizationます。

HttpRequestInfo request = new HttpRequestInfo(Request);
code = Request.QueryString["code"];

今、私は立ち往生しています。POSTこのコードを次 のようにする必要があることはわかっています。

https://accounts.google.com/o/oauth2/token <insert POST parameters here>

しかし、私はこれを行う方法について完全に立ち往生しています。私は多くのことを試しましたが、私が得ているのは次のとおりです。

Server time out error - it failed to connect to the requested server

この問題を解決するにはどうすればよいですか?


編集 24/09/2012:

Visual Studio 2012 の新しいリリースでは、認証を処理するように OAuth が組み込まれています: http://www.asp.net/vnext/overview/videos/oauth-in-the-default-aspnet-45-templates

これは、ユーザーが Google などの外部アカウントを使用してローカル Web アプリケーションにログインできることを意味します。

これは、ユーザーが Google 経由でログインすると、必要な Google ドライブ ファイルを取得できるということですか? それとも、これは単にローカル Web アプリケーションでの登録処理を簡単にするためですか?

再度、感謝します。


これが私のエラーです:

[SocketException (0x274c): A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond [2404:6800:4008:c01::54]:443]
   System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress) +251
   System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Int32 timeout, Exception& exception) +279

[WebException: Unable to connect to the remote server]
   System.Net.HttpWebRequest.GetRequestStream(TransportContext& context) +6098637
   System.Net.HttpWebRequest.GetRequestStream() +13
   GoogleDriveTest.WebForm1.Page_Load(Object sender, EventArgs e) in C:\Projects\GoogleDriveTest\GoogleDriveTest\GoogleDriveTest\WebForm1.aspx.cs:101
   System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +14
   System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +35
   System.Web.UI.Control.OnLoad(EventArgs e) +91
   System.Web.UI.Control.LoadRecursive() +74
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2207

解決しました!!

私の問題は、必要な URL への接続を許可しないプロキシが職場にあることでした。だから私は自分のブラウザでプロキシをオフにし、それをバイパスして、必要なURLに直接アクセスし、アクセストークンを正常に取得しました:D

4

2 に答える 2

0

ドキュメントには、参照として使用できる C# で記述された完全な Web アプリケーション サンプルが含まれています。

https://developers.google.com/drive/examples/dotnet

これは ASP.NET MVC アプリケーションですが、承認部分は Web フォーム アプリケーションで簡単に再利用できます。

認証フローの詳細については、OAuth 2.0 資格情報の取得と使用方法に関するドキュメントを確認してください。

于 2012-09-18T09:10:55.750 に答える
0

DotNetOpenAuth ライブラリでこれを行う方法を示すQuickStart (.NET タブに注意してください!) を参照してください。

次の行に注意してください。

// Retrieve the access token by using the authorization code:
return arg.ProcessUserAuthorization(authCode, state);
于 2012-09-18T06:57:07.063 に答える