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

作成者: Valeriy NovytskyyRick AndersonBy Valeriy Novytskyy and Rick Anderson

従来の Google + Api が、2019 年 3 月 7 日の時点でシャット ダウンされたします。Legacy Google+ APIs have been shut down as of March 7, 2019. Google + にサインインして、開発者は、システムで新しい Google サインインを移動する必要があります。Google+ sign in and developers must move to a new Google sign in system. Google 認証用の ASP.NET Core 2.1、2.2 パッケージは、変化に対応する更新があります。The ASP.NET Core 2.1 and 2.2 packages for Google Authentication have be updated to accommodate the changes. 詳細と ASP.NET Core 用の一時的な軽減策は、次を参照してください。この GitHub の問題します。For more information and temporary mitigations for ASP.NET Core, see this GitHub issue. このチュートリアルは、新しいセットアップ プロセスで更新されました。This tutorial has been updated with the new setup process.

このチュートリアルでは、ASP.NET Core 2.2 プロジェクトが作成を使用して、Google アカウントでサインインするユーザーを有効にする方法、前のページします。This tutorial shows you how to enable users to sign in with their Google account using the ASP.NET Core 2.2 project created on the previous page.

Google API コンソール プロジェクトとクライアント ID を作成します。Create a Google API Console project and client ID

  • 移動します統合で Google サインインを web アプリに選択A プロジェクトの構成します。Navigate to Integrating Google Sign-In into your web app and select CONFIGURE A PROJECT.
  • OAuth クライアントを構成するダイアログ ボックスで、 Web serverします。In the Configure your OAuth client dialog, select Web server.
  • 承認済みのリダイレクト Uriテキスト入力ボックス、リダイレクト URI を設定します。In the Authorized redirect URIs text entry box, set the redirect URI. たとえば、https://localhost:5001/signin-googleFor example, https://localhost:5001/signin-google
  • 保存、クライアント IDクライアント シークレットします。Save the Client ID and Client Secret.
  • 新しいパブリック url の登録、サイトをデプロイするとき、 Google コンソールします。When deploying the site, register the new public url from the Google Console.

ストア Google ClientID と ClientSecretStore Google ClientID and ClientSecret

Google などの機密設定を保存Client IDClient Secretで、 Secret Managerします。Store sensitive settings such as the Google Client ID and Client Secret with the Secret Manager. このチュートリアルの目的で、名前トークンAuthentication:Google:ClientIdAuthentication:Google:ClientSecret:For the purposes of this tutorial, name the tokens Authentication:Google:ClientId and Authentication:Google:ClientSecret:

dotnet user-secrets set "Authentication:Google:ClientId" "X.apps.googleusercontent.com"
dotnet user-secrets set "Authentication:Google:ClientSecret" "<client secret>"

環境変数内で階層キーを操作する場合、コロン区切り (:) がすべてのプラットフォームでは機能しない場合があります (Bash など)。When working with hierarchical keys in environment variables, a colon separator (:) may not work on all platforms (for example, Bash). 二重のアンダースコア (__) はすべてのプラットフォームでサポートされ、コロンに置換されます。A double underscore (__) is supported by all platforms and is replaced by a colon.

API の資格情報と使用量を管理することができます、 API コンソールします。You can manage your API credentials and usage in the API Console.

Google 認証を構成します。Configure Google authentication

Google サービスを追加Startup.ConfigureServices:Add the Google service to Startup.ConfigureServices:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(
            Configuration.GetConnectionString("DefaultConnection")));
    services.AddDefaultIdentity<IdentityUser>()
        .AddDefaultUI(UIFramework.Bootstrap4)
        .AddEntityFrameworkStores<ApplicationDbContext>();

    services.AddAuthentication()
        .AddGoogle(options =>
        {
            IConfigurationSection googleAuthNSection = 
                Configuration.GetSection("Authentication:Google");

            options.ClientId = googleAuthNSection["ClientId"];
            options.ClientSecret = googleAuthNSection["ClientSecret"];
        });

    services.AddMvc()
        .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}

呼び出しAddIdentityスキームの既定の設定を構成します。The call to AddIdentity configures the default scheme settings. AddAuthentication(String)オーバー ロードのセット、プロパティ。The AddAuthentication(String) overload sets the DefaultScheme property. AddAuthentication (アクション<AuthenticationOptions>)オーバー ロードでは、さまざまな目的の既定の認証方式を設定するために使用できる認証オプションを構成できます。The AddAuthentication(Action<AuthenticationOptions>) overload allows configuring authentication options, which can be used to set up default authentication schemes for different purposes. 後続の呼び出しAddAuthentication以前に構成された上書きAuthenticationOptionsプロパティ。Subsequent calls to AddAuthentication override previously configured AuthenticationOptions properties.

AuthenticationBuilder認証スキームあたり 1 回に呼び出されますのみ認証ハンドラーを登録する拡張メソッドも可能性があります。AuthenticationBuilder extension methods that register an authentication handler may only be called once per authentication scheme. オーバー ロードが存在するスキーマ名と、スキームのプロパティの構成を許可して、表示名。Overloads exist that allow configuring the scheme properties, scheme name, and display name.

Google のサインインSign in with Google

  • アプリを実行し、をクリックしてログインします。Run the app and click Log in. Google でサインインするためのオプションが表示されます。An option to sign in with Google appears.
  • をクリックして、 Googleボタンで、認証の Google にリダイレクトします。Click the Google button, which redirects to Google for authentication.
  • Google の資格情報を入力した後は、web サイトにリダイレクトされます。After entering your Google credentials, you are redirected back to the web site.

プロキシまたはロード バランサーによる要求情報の転送Forward request information with a proxy or load balancer

アプリがプロキシ サーバーまたはロード バランサーの背後に展開されると、元の要求情報の一部が要求ヘッダー内でアプリに転送される場合があります。If the app is deployed behind a proxy server or load balancer, some of the original request information might be forwarded to the app in request headers. 通常、この情報にはセキュアな要求スキーム (https)、ホスト、およびクライアント IP アドレスが含まれます。This information usually includes the secure request scheme (https), host, and client IP address. アプリでは、これらの要求ヘッダーを自動的に読み取って、元の要求情報を検出して使用することはありません。Apps don't automatically read these request headers to discover and use the original request information.

スキームは、外部プロバイダーによる認証フローに影響を及ぼすリンクの生成に使用されます。The scheme is used in link generation that affects the authentication flow with external providers. セキュアなスキーム (https) が失われると、アプリでは、安全ではない不正なリダイレクト URL が生成されます。Losing the secure scheme (https) results in the app generating incorrect insecure redirect URLs.

Forwarded Headers Middleware を使用して、アプリが要求を処理する際に元の要求情報を利用できるようにします。Use Forwarded Headers Middleware to make the original request information available to the app for request processing.

詳細については、プロキシ サーバーとロード バランサーを使用するために ASP.NET Core を構成する を参照してください。For more information, see プロキシ サーバーとロード バランサーを使用するために ASP.NET Core を構成する.

複数の認証プロバイダーMultiple authentication providers

アプリが複数のプロバイダーを必要とする場合、AddAuthentication の背後にあるプロバイダーの拡張メソッドをチェインします。When the app requires multiple providers, chain the provider extension methods behind AddAuthentication:

services.AddAuthentication()
    .AddMicrosoftAccount(microsoftOptions => { ... })
    .AddGoogle(googleOptions => { ... })
    .AddTwitter(twitterOptions => { ... })
    .AddFacebook(facebookOptions => { ... });

参照してください、 GoogleOptions Google 認証でサポートされる構成オプションの詳細について、API リファレンス。See the GoogleOptions API reference for more information on configuration options supported by Google authentication. これは、ユーザーに関するさまざまな情報を要求を使用できます。This can be used to request different information about the user.

既定のコールバック URI を変更します。Change the default callback URI

URI セグメント/signin-googleGoogle の認証プロバイダーの既定のコールバックとして設定されます。The URI segment /signin-google is set as the default callback of the Google authentication provider. 既定のコールバック URI を変更するには、継承を使用して、Google の認証ミドルウェアを構成するときにRemoteAuthenticationOptions.CallbackPathのプロパティ、 GoogleOptionsクラス。You can change the default callback URI while configuring the Google authentication middleware via the inherited RemoteAuthenticationOptions.CallbackPath property of the GoogleOptions class.

トラブルシューティングTroubleshooting

  • サインインでは機能しません、エラー通知が届かない場合は、問題をデバッグしやすくする開発モードに切り替えます。If the sign-in doesn't work and you aren't getting any errors, switch to development mode to make the issue easier to debug.
  • ユーザーが呼び出すことによって構成されていない場合services.AddIdentityConfigureServicesで結果を認証しようとすると、 ArgumentException:'SignInScheme' オプションを指定する必要がありますします。If Identity isn't configured by calling services.AddIdentity in ConfigureServices, attempting to authenticate results in ArgumentException: The 'SignInScheme' option must be provided. このチュートリアルで使用するプロジェクト テンプレートによりこれが行われるようになります。The project template used in this tutorial ensures that this is done.
  • 取得する場合は、初期移行を適用することで、サイト データベースが作成されていない要求の処理中にデータベース操作が失敗しましたエラー。If the site database has not been created by applying the initial migration, you get A database operation failed while processing the request error. 選択適用移行データベースを作成し、エラーを続行するページを更新します。Select Apply Migrations to create the database, and refresh the page to continue past the error.

次の手順Next steps

  • この記事では、Google で認証する方法を示しました。This article showed how you can authenticate with Google. 記載されているその他のプロバイダーで認証する同様のアプローチを利用できる、前のページします。You can follow a similar approach to authenticate with other providers listed on the previous page.
  • アプリを Azure に発行すると、リセット、 ClientSecret Google API コンソールでします。Once you publish the app to Azure, reset the ClientSecret in the Google API Console.
  • 設定、Authentication:Google:ClientIdAuthentication:Google:ClientSecretとして、Azure portal でアプリケーションの設定。Set the Authentication:Google:ClientId and Authentication:Google:ClientSecret as application settings in the Azure portal. 構成システムは、環境変数からキーの読み取りを設定します。The configuration system is set up to read keys from environment variables.