ASP.NET Core의 Google 외부 로그인 설정Google external login setup in ASP.NET Core

작성자: Valeriy NovytskyyRick AndersonBy Valeriy Novytskyy and Rick Anderson

이 자습서에서는 사용자가 이전 페이지에서 만든 ASP.NET Core 3.0 프로젝트를 사용 하 여 Google 계정으로 로그인 할 수 있도록 하는 방법을 보여 줍니다.This tutorial shows you how to enable users to sign in with their Google account using the ASP.NET Core 3.0 project created on the previous page.

Google API 콘솔 프로젝트 및 클라이언트 ID 만들기Create a Google API Console project and client ID

  • AspNetCore를 설치 합니다.Install Microsoft.AspNetCore.Authentication.Google.
  • Google Sign-In를 웹 앱에 통합 으로 이동 하 여 프로젝트 구성 을 선택 합니다.Navigate to Integrating Google Sign-In into your web app and select Configure a project .
  • OAuth 클라이언트 구성 대화 상자에서 웹 서버 를 선택 합니다.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:44312/signin-googleFor example, https://localhost:44312/signin-google
  • 클라이언트 ID클라이언트 암호 를 저장 합니다.Save the Client ID and Client Secret .
  • 사이트를 배포할 때 Google 콘솔 에서 새 공용 url을 등록 합니다.When deploying the site, register the new public url from the Google Console .

Google 클라이언트 ID 및 암호 저장Store the Google client ID and secret

암호 관리자를 사용 하 여 GOOGLE 클라이언트 ID 및 비밀 값과 같은 중요 한 설정을 저장 합니다.Store sensitive settings such as the Google client ID and secret values with Secret Manager. 이 샘플에서는 다음 단계를 사용 합니다.For this sample, use the following steps:

  1. 비밀 저장소 사용의 지침에 따라 비밀 저장소에 대 한 프로젝트를 초기화 합니다.Initialize the project for secret storage per the instructions at Enable secret storage.

  2. 비밀 키 및를 사용 하 여 로컬 비밀 저장소에 중요 한 설정을 저장 합니다 Authentication:Google:ClientId Authentication:Google:ClientSecret .Store the sensitive settings in the local secret store with the secret keys Authentication:Google:ClientId and Authentication:Google:ClientSecret:

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

: 구분 기호는 모든 플랫폼의 환경 변수 계층적 키에서 작동하지 않습니다.The : separator doesn't work with environment variable hierarchical keys on all platforms. 이중 밑줄 __은 다음과 같습니다.__, the double underscore, is:

  • 모든 플랫폼에서 지원됩니다.Supported by all platforms. 예를 들어 : 구분 기호는 Bash에서 지원되지 않지만 __은 지원됩니다.For example, the : separator is not supported by Bash, but __ is.
  • 자동으로 :으로 대체Automatically replaced by a :

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>(options =>
        options.SignIn.RequireConfirmedAccount = true)
            .AddEntityFrameworkStores<ApplicationDbContext>();
    services.AddRazorPages();

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

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

AddIdentity 에 대 한 호출은 기본 구성표 설정을 구성 합니다.The call to AddIdentity configures the default scheme settings. Addauthentication (String) 오버 로드는 defaultscheme 속성을 설정 합니다.The AddAuthentication(String) overload sets the DefaultScheme property. Addauthentication (Action<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 확장 메서드는 인증 체계 당 한 번만 호출할 수 있습니다.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 자격 증명을 입력 하면 웹 사이트로 다시 리디렉션됩니다.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.

전달된 헤더 미들웨어를 사용하여 요청 처리를 위한 원본 요청 정보를 앱에 제공합니다.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 => { ... });

GoogleOptionsGoogle 인증에서 지 원하는 구성 옵션에 대 한 자세한 내용은 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-google Google 인증 공급자의 기본 콜백으로 설정 됩니다.The URI segment /signin-google is set as the default callback of the Google authentication provider. GoogleOptions 클래스의 상속 된 Remoteauthenticationoptions. callbackpath 속성을 통해 Google 인증 미들웨어를 구성 하는 동안 기본 콜백 URI를 변경할 수 있습니다.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.
  • Identity에서를 호출 하 여를 구성 하지 않은 경우 services.AddIdentity ConfigureServices 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:ClientId Authentication: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.