質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
.NET Core

.NET Coreは、マネージソフトウェアフレームワークでオープンソースで実装されています。クロスプラットフォームを前提に考えられており、Windows/Mac/Linuxで動くアプリケーションを作成することが可能です。

Gmail

GmailとはGoogleによって提供されているウェブメールのサービスのことです。

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

1954閲覧

Gmail APIでGmailクライアントを作るときの認証方法

dekaribon

総合スコア14

.NET Core

.NET Coreは、マネージソフトウェアフレームワークでオープンソースで実装されています。クロスプラットフォームを前提に考えられており、Windows/Mac/Linuxで動くアプリケーションを作成することが可能です。

Gmail

GmailとはGoogleによって提供されているウェブメールのサービスのことです。

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

0クリップ

投稿2020/11/07 15:40

編集2020/11/07 15:47

C#・dot net core 3.1です。
スタックオーバーフローにマルチポストしています。
GmailAPIを使ってメールクライアントのように、

  1. アカウント追加ボタンを押す
  2. Googleログイン画面が開く
  3. 権限を許可
  4. 以後は許可を促すプロンプトを出さずに使用できる

の流れを作りたいのですが、方法がわかりません。

GoogleのAPI管理サイト(GoogleCloudPlatform)でOauth2認証情報を作成し、Jsonをダウンロードしました。
そのJsonをつかって以下のようにOauth2認証でTokenを取得できました。Tokenを保存した以後は許可を促すプロンプトは表示されずに使えました。

C#

1 static string[] Scopes = { GmailService.Scope.GmailReadonly}; 2 static string OAuthCredentialFilePath = "Credentials/credentials.json"; 3 4 private static async Task OAuth2Auth() 5 { 6 UserCredential credential; 7 8 using (var stream = 9 new FileStream(OAuthCredentialFilePath, FileMode.Open, FileAccess.Read)) 10 { 11 string credPath = "token.json"; 12 credential = await GoogleWebAuthorizationBroker.AuthorizeAsync( 13 GoogleClientSecrets.Load(stream).Secrets, 14 Scopes, 15 "user", 16 CancellationToken.None, 17 new FileDataStore(credPath, true)); 18 } 19 20 var service = new GmailService(new BaseClientService.Initializer() 21 { 22 HttpClientInitializer = credential 23 }); 24 }

おそらくメールクライアントのようにGmailアカウントを新たに追加するというのは、ユーザーにGoogleアカウントでログインさせて新たにTokenを取得して保存するということだと思います。
しかし、この場合だと新たに認証することができません。

メールクライアントのようにアカウントを追加していくフローを実現するにはどうしたら良いでしょうか。
よろしくおねがいします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

複数アカウントを追加していくことができました。
GoogleからOAuth2で使用するjsonをダウンロードする際にはもちろんGoogleアカウントが必要ですが、私はそのアカウントでダウンロードしたJsonファイルではそのアカウントでしか使用できないと勘違いしていました。

C#

1credential = await GoogleWebAuthorizationBroker.AuthorizeAsync( 2 GoogleClientSecrets.Load(stream).Secrets, 3 Scopes, 4 "user", 5 CancellationToken.None, 6 new FileDataStore(credPath, true));

GoogleWebAuthorizationBroker.AuthorizeAsyncというメソッドのuserという引数を変えると、新しい認可画面が表示されました。
これで違うアカウントでログインしてスコープを許可すれば、FileDataStoreでしていしたディレクトリにアクセストークンが保存され、以後user引数に渡したユーザー名でトークン保存先のディレクトリを見に行ってくれるようです。

投稿2020/11/08 05:23

dekaribon

総合スコア14

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問