ヴァレリー・ノヴィツキー、リック・アンダーソン、シャラフ・アバセリー
このチュートリアルでは、「ASP.NET Core での外部ログイン プロバイダーとIdentityの使用」で作成したサンプル ASP.NET Core プロジェクトを使用して、Google アカウントでのユーザー サインインを有効にする方法について説明します。 「Google for Web でサインイン: Google API クライアント ID を作成するためのセットアップ」の Google の公式ガイダンスに従ってください。
Google でアプリを作成する
- Google クラウド プラットフォームの Google API およびサービス ページに移動します。
- プロジェクトが存在しない場合は、[プロジェクトの作成] ボタンを選択して新しい プロジェクトを作成 します。 読み込む既存のプロジェクトとは異なるプロジェクトを選択するには、UI の左上隅にある読み込まれたプロジェクトのボタンを選択し、その後にプロジェクトを選択します。 新しいプロジェクトを追加するには、UI の左上隅にある読み込まれたプロジェクトのボタンを選択し、[ 新しいプロジェクト ] ボタンを選択します。
- 新しいプロジェクトを作成する場合:
- プロジェクト名を入力します。
- 必要に応じて、プロジェクトの 組織 を選択します。
- [作成] ボタンを選択します。
プロジェクトを作成すると、プロジェクトの [ダッシュボード ] ページが読み込まれます。プロジェクトを構成できます。
[資格情報] タブ を 開き、OAuth クライアントを作成します。
資格情報を作成するための前提条件は、OAuth 同意画面を構成することです。 同意が構成されていない場合は、同意画面を構成するためのプロンプトが表示されます。
- [ 同意画面の構成] を選択するか、サイドバーで [OAuth 同意画面 ] を選択します。
- OAuth 同意画面で、[作業の開始] を選択します。
- アプリ名とユーザー サポートメールを設定します。
- 対象ユーザーの種類を [外部] に設定します。
- 連絡先の電子メール アドレスを入力して 連絡先情報 を追加します。
- 条項に同意します。
- を選択してを作成します。
[クライアント] サイドバー メニュー項目を開いて、アプリの クライアント 資格情報を作成します。
- [ クライアントの作成 ] ボタンを選択します。
- [アプリケーションの種類] として [Web アプリケーション ] を選択 します。
- クライアントの 名前 を入力します。
-
承認されたリダイレクト URI を追加します。 ローカル テストでは、既定のアドレス
https://localhost:{PORT}/signin-google
を使用します。ここで、{PORT}
プレースホルダーはアプリのポートです。 - [ 作成 ] ボタンを選択してクライアントを作成します。
- クライアント ID とクライアント シークレットを保存します。これは、後で ASP.NET アプリ構成で使用します。
注
/signin-google
URI セグメントは、Google 認証プロバイダーの既定のコールバックとして設定されます。
RemoteAuthenticationOptions.CallbackPath クラスの継承されたGoogleOptions プロパティを使用して Google 認証ミドルウェアを構成するときに、既定のコールバック URI を変更できます。
アプリをデプロイする場合は、次のいずれかを行います。
- Google Console のアプリのリダイレクト URI を、アプリのデプロイされたリダイレクト URI に更新します。
- 運用リダイレクト URI を使用して、運用アプリの Google Console で新しい Google API 登録を作成します。
Google クライアント ID とシークレットを保存する
シークレット マネージャーを使用して、Google クライアント ID やシークレット値などの機密性の高い設定を保存します。 このサンプルでは、次の手順に従います。
ASP.NET Core での開発中のアプリ シークレットの安全なストレージの手順に従って、シークレット ストレージのプロジェクトを初期化します。
秘密キーの
Authentication:Google:ClientId
(値:{CLIENT ID}
プレースホルダー) とAuthentication:Google:ClientSecret
(値:{CLIENT SECRET}
プレースホルダー) を使用して、ローカル シークレット ストアに機密設定を格納します。dotnet user-secrets set "Authentication:Google:ClientId" "{CLIENT ID}" dotnet user-secrets set "Authentication:Google:ClientSecret" "{CLIENT SECRET}"
:
区切り記号は、すべてのプラットフォームの環境変数階層キーでは機能しません。 たとえば、:
区切り記号は、Bashではサポートされていません。 ダブルアンダースコア (__
) とは次のことを指します。
- すべてのプラットフォームでサポートされています。
- 自動的にコロン、
:
に置き換えられます。
API コンソールで API 資格情報と使用状況を管理します。
Google 認証を構成する
Program
ファイルに認証サービスを追加します。
services.AddAuthentication().AddGoogle(googleOptions =>
{
googleOptions.ClientId = configuration["Authentication:Google:ClientId"];
googleOptions.ClientSecret = configuration["Authentication:Google:ClientSecret"];
});
認証サービスを Startup.ConfigureServices
に追加します。
services.AddAuthentication().AddGoogle(googleOptions =>
{
googleOptions.ClientId = configuration["Authentication:Google:ClientId"];
googleOptions.ClientSecret = configuration["Authentication:Google:ClientSecret"];
});
AddAuthentication(IServiceCollection, String) オーバーロードは、DefaultScheme プロパティを設定します。
AddAuthentication(IServiceCollection, Action<AuthenticationOptions>) オーバーロードを使用すると、さまざまな目的で既定の認証スキームを設定するために使用できる認証オプションを構成できます。
AddAuthentication
に対する後続の呼び出しは、以前に構成された AuthenticationOptions プロパティをオーバーライドします。
認証ハンドラーを登録する AuthenticationBuilder 拡張メソッドは、認証スキームごとに 1 回だけ呼び出されます。 スキームのプロパティ、スキーム名、および表示名を構成できるオーバーロードが存在します。
Google でサインインする
- アプリを実行し、ログイン選択します。
- [ 別のサービスを使用してログインします]で、[Google] を選択します。
- ブラウザーは、認証のために Google にリダイレクトされます。
- ログインする Google アカウントを選択するか、Google の資格情報を入力します。
- 初めてサインインする場合は、アプリが Google アカウント情報にアクセスすることを許可するように求められます。
- ブラウザーはアプリにリダイレクトされ、メールを設定できます。
これで、ユーザーは Google の資格情報を使用してログインします。
トラブルシューティング
- エラーを受け取らずにサインインが機能しない場合は、開発モードに切り替えて、アプリと Google の登録をデバッグしやすくします。
- 最初の移行を適用してサイトのデータベースが作成されていない場合は、次のエラーが発生します。 要求の処理中にデータベース操作が失敗しました。 [ 移行の適用] を選択してデータベースを作成し、ページを更新してエラーを超えて続行します。
- Google などの OAuth 2.0 プロバイダーによる要求を正常に認証した後の HTTP 500 エラーと、React やその他の SPA アプリに対して Google で外部認証を実装する方法については、「 Core Web Api 外部ログイン認証 (Asp.Net
dotnet/AspNetCore.Docs
#14169) での認証が成功した後にミドルウェアが 'signin-google' ルートを処理しない」を参照してください。
次の手順
- この記事では、Google での認証について説明します。 他の外部プロバイダーとの認証については、「 ASP.NET Core での Identity での外部ログイン プロバイダーの使用」を参照してください。
- アプリが Azure にデプロイされたら、Google API コンソールで
ClientSecret
をリセットします。 - Azure portal でアプリ設定として
Authentication:Google:ClientId
とAuthentication:Google:ClientSecret
を設定します。 構成システムは、環境変数からキーを読み取るために設定されます。
その他のリソース
ASP.NET Core