ASP.NET Core での Google 外部ログインのセットアップ
Valeriy Novytskyy、Rick Anderson、シャラフ アバセリー
このチュートリアルでは、前のページで作成した ASP.NET Core プロジェクトを使用して、ユーザーが自分の Google アカウントでサインインできるようにする方法を示します。
Google OAuth 2.0 クライアント ID とシークレットを作成する
Google Sign-In を Web アプリ に統合する
のガイダンスに従う (Google ドキュメント) Google API & Services
に移動します。 Project がまず存在する必要があります。存在しない場合は作成する必要があるかもしれません。 プロジェクトを選択したら、ダッシュボードを入力します。
Dashboard の [Oauth consent] (OAuth の同意) 画面で、次の手順を実行します。
- [User Type - External] (ユーザーの種類 - 外部) と [CREATE] (作成) を選択します。
- [App information] (アプリ情報) ダイアログで、アプリのアプリ名、ユーザー サポートのメール アドレス、および開発者の連絡先情報を入力します。
- スコープの手順をステップ実行します。
- テスト ユーザーの手順をステップ実行します。
OAuth 同意画面 を確認し、アプリのダッシュボードに戻ります。
アプリケーション ダッシュボードの [資格情報] タブで、[CREATE CREDENTIALS>OAuth クライアント ID] を選択します。
[アプリケーションの種類]>[Web アプリケーション] を選択し、名前を選択します。
[Authorized redirect URIs](承認されたリダイレクト URI) セクションで、 [ADD URI](URI の追加) を選択してリダイレクト URI を設定します。 リダイレクト URI の例:
https://localhost:{PORT}/signin-google
。ここで、{PORT}
プレースホルダーはアプリのポートです。[作成] ボタンを選択します。
クライアント ID とクライアント シークレット を保存し、アプリの構成で使用します。
サイトを展開する場合は、次のいずれかを行います。
- Google Console のアプリのリダイレクト URI を、アプリのデプロイされたリダイレクト URI に更新します。
- 運用リダイレクト URI を使用して、運用アプリの Google Console で新しい Google API 登録を作成します。
Google クライアント ID とシークレットを保存する
Google クライアント ID やシークレット値などの機密性の高い設定を、Secret Managerに保存します。 このサンプルでは、次の手順を使用します。
「シークレット ストレージのを有効にする」の手順
従って、シークレット ストレージ用にプロジェクトを初期化します。 秘密キーの
Authentication:Google:ClientId
とAuthentication:Google:ClientSecret
を使用して、機密性の高い設定をローカル シークレット ストアに格納します。dotnet user-secrets set "Authentication:Google:ClientId" "<client-id>" dotnet user-secrets set "Authentication:Google:ClientSecret" "<client-secret>"
:
区切り記号は、すべてのプラットフォームの環境変数階層キーでは機能しません。 たとえば、:
区切り記号は、Bashではサポートされていません。 ダブルアンダースコア (__
) とは次のことを指します。
- すべてのプラットフォームでサポートされています。
- 自動的にコロン、
:
に置き換えられます。
API の資格情報と使用状況は、API コンソールで管理できます。
Google 認証を構成する
Google.Apis.Auth.AspNetCore3
NuGet パッケージをアプリに追加します。- 認証サービスを
program.cs
に追加します。 Add Authtication for asp.net app
に従う
AddIdentity を呼び出すと、既定のスキーム設定が構成されます。 AddAuthentication(IServiceCollection, String) オーバーロードは、DefaultScheme プロパティを設定します。 AddAuthentication(IServiceCollection, Action<AuthenticationOptions>) オーバーロードを使用すると、さまざまな目的で既定の認証スキームを設定するために使用できる認証オプションを構成できます。 AddAuthentication
に対する後続の呼び出しは、以前に構成された AuthenticationOptions プロパティをオーバーライドします。
認証ハンドラーを登録する AuthenticationBuilder 拡張メソッドは、認証スキームごとに 1 回だけ呼び出されます。 スキームのプロパティ、スキーム名、および表示名を構成できるオーバーロードが存在します。
Google でサインインする
- ライブラリのリンクを取得するには、のGoogleデベロッパーライブラリリンクにアクセスしてください。
- 次に、Google デベロッパー ボタンの生成 に移動します
- 成功するとそのリンクに転送されるため、コントローラーを
data-login_uri="{HostName}/{ControllerName}/{actionName}"
attrbute と一致するように設定します。 - ログイン プロセスの完了時に Google から返される、
string credential
1 つの引数を受け取るコントローラーとアクションを作成します。 - 次のコード行を使用して
credential
を確認します:GoogleJsonWebSignature.Payload payload = await GoogleJsonWebSignature.ValidateAsync(credential);
- これにより、ログインしているユーザーに関する利用可能な情報が取得され、データベースに格納される可能性があります。
既定のコールバック URI を変更する
/signin-google
URI セグメントは、Google 認証プロバイダーの既定のコールバックとして設定されます。 GoogleOptions クラスの継承された RemoteAuthenticationOptions.CallbackPath プロパティを使用して Google 認証ミドルウェアを構成するときに、既定のコールバック URI を変更できます。
トラブルシューティング
- サインインが機能せず、エラーが発生しない場合は、開発モードに切り替えて問題をデバッグしやすくします。
ConfigureServices
でservices.AddIdentity
を呼び出して Identity が構成されていない場合、認証しようとすると、"ArgumentException: The 'SignInScheme' オプションを指定する必要があります" になります。 このチュートリアルで使用するプロジェクト テンプレートを使用すると、Identity が構成されます。- 初期移行を適用してサイト データベースが作成されていない場合は、要求 エラーの処理中にデータベース操作が失敗
。 [移行の適用] を選択してデータベースを作成し、ページを更新するとエラーが解消されます。 - Google などの OAuth 2.0 プロバイダーによる要求の認証に成功した後の HTTP 500 エラー: この GitHub の問題
参照してください。 - Google for React やその他の SPA アプリで外部認証を実装する方法: この GitHub の問題
参照してください。
次の手順
- この記事では、Google で認証する方法について説明しました。 同様の手法で、前のページ に記載されている他のプロバイダーを使用して認証できます。
- アプリを Azure に発行したら、Google API コンソールで
ClientSecret
をリセットします。 - Azure portal でアプリケーション設定として
Authentication:Google:ClientId
とAuthentication:Google:ClientSecret
を設定します。 構成システムは、環境変数からキーを読み取るために設定されます。
ASP.NET Core