0

私の WinForms アプリは、Google API (Calendar) の 1 つにアクセスする必要があります。このためには、アプリに承認が必要であり、Google はこの目的のために OAuth 2 を提供しています。ここのドキュメントサイトですべてを読みました。

Google の別のドキュメント ページから、ブラウザ リクエストを介して認証キーを取得する方法を学びました。これは、コンソール C# アプリケーションで行われます。それがすることは次のとおりです。

var provider = new NativeApplicationClient(GoogleAuthenticationServer.Description, CLIENT_ID, CLIENT_SECRET);
var auth = new OAuth2Authenticator<NativeApplicationClient>(provider, GetAuthorization);
var service = new CalendarService(auth);
string id = <calendar id>;
Calendar calendar = service.Calendars.Get(id).Fetch();

最後の行で、ブラウザ ウィンドウが開き、Google アカウントへのアプリ アクセスを許可するように求める Google ページが表示されます。コンソール アプリケーションでは、ReadLine() が入力を待機しています。GetAuthorizationこれは次のメソッドに由来します。

private static IAuthorizationState GetAuthorization(NativeApplicationClient arg)
{
    // Get the auth URL:
    IAuthorizationState state = new AuthorizationState(new[] { CalendarService.Scopes.Calendar.GetStringValue() });
    state.Callback = new Uri(NativeApplicationClient.OutOfBandCallbackUrl);
    Uri authUri = arg.RequestUserAuthorization(state);

    // Request authorization from the user (by opening a browser window):
    Process.Start(authUri.ToString());
    Console.Write("  Authorization Code: ");
    string authCode = Console.ReadLine();
    Console.WriteLine();

    // Retrieve the access token by using the authorization code:
    return arg.ProcessUserAuthorization(authCode, state);
}

そのため、Gmail アカウントへのアクセスをアプリに許可すると、代わりにコードが返されます。このコードをコンソール ウィンドウに貼り付けると、アプリの残りの部分が正常に機能します (私の場合は、新しいカレンダー イベントを作成します)。

しかし、私の問題は、コンソール アプリではなく、WinForms アプリでこの機能が必要だということです。これに関するGoogleのページには何も見つかりませんでした。

私がこれまでに持っているもの:

  • ユーザーがボタンをクリックすると、ブラウザーが開き、ユーザーはアクセスを許可してコードを取得します。
  • ユーザーはこのコードをアプリに貼り付けます。
  • 別のボタンがクリックされました。ここで、ユーザーが入力したコードを認証プロセスに使用したいと考えています。これは文字列であり、これをこの投稿の冒頭に記載されているすべての認証方法と組み合わせる方法がわかりません。

ネイティブの .NET ライブラリの代わりに Google の REST クライアントを使用すれば可能だと思いますが、REST の代わりに .NET ライブラリを使用したいと心から思っています。

4

1 に答える 1

0

AuthorizationMgrクラス、特に RequestNativeAuthorization メソッドを見てください。これは、tcp リスナーを作成し、着信要求からコードを取得するLoopbackServerAuthorizationFlowクラスを使用します。

また、そのメカニズムを使用するサンプルの 1 つ (例: CreateTaskサンプル)も参照してください。

于 2013-03-09T03:04:51.810 に答える