次の方法で共有


ASP.NET Core での Google 外部ログインのセットアップ

Valeriy NovytskyyRick 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に保存します。 このサンプルでは、次の手順を使用します。

  1. 「シークレット ストレージのを有効にする」の手順 従って、シークレット ストレージ用にプロジェクトを初期化します。

  2. 秘密キーの Authentication:Google:ClientIdAuthentication:Google:ClientSecretを使用して、機密性の高い設定をローカル シークレット ストアに格納します。

    dotnet user-secrets set "Authentication:Google:ClientId" "<client-id>"
    dotnet user-secrets set "Authentication:Google:ClientSecret" "<client-secret>"
    

: 区切り記号は、すべてのプラットフォームの環境変数階層キーでは機能しません。 たとえば、: 区切り記号は、Bashではサポートされていません。 ダブルアンダースコア (__) とは次のことを指します。

  • すべてのプラットフォームでサポートされています。
  • 自動的にコロン、:に置き換えられます。

API の資格情報と使用状況は、API コンソールで管理できます。

Google 認証を構成する

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 credential1 つの引数を受け取るコントローラーとアクションを作成します。
  • 次のコード行を使用して credential を確認します: GoogleJsonWebSignature.Payload payload = await GoogleJsonWebSignature.ValidateAsync(credential);
  • これにより、ログインしているユーザーに関する利用可能な情報が取得され、データベースに格納される可能性があります。

既定のコールバック URI を変更する

/signin-google URI セグメントは、Google 認証プロバイダーの既定のコールバックとして設定されます。 GoogleOptions クラスの継承された RemoteAuthenticationOptions.CallbackPath プロパティを使用して Google 認証ミドルウェアを構成するときに、既定のコールバック URI を変更できます。

トラブルシューティング

  • サインインが機能せず、エラーが発生しない場合は、開発モードに切り替えて問題をデバッグしやすくします。
  • ConfigureServicesservices.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:ClientIdAuthentication:Google:ClientSecret を設定します。 構成システムは、環境変数からキーを読み取るために設定されます。