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 로그인에 웹 앱 선택한 는 프로젝트 구성합니다.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:5001/signin-google과 같습니다.For 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 ID 하 고 Client Secret 사용 하 여 합니다 암호 관리자합니다.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.

에 대 한 호출 AddIdentity 기본 체계 설정을 구성 합니다.The call to AddIdentity configures the default scheme settings. 합니다 AddAuthentication(String) 집합 오버 로드는 DefaultScheme 속성입니다.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 인증 처리기를 등록 하는 확장 메서드 수만 수 마다 한 번씩 호출 인증 체계입니다.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 => { ... });

참조 된 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-google Google 인증 공급자의 기본 콜백으로 설정 됩니다.The URI segment /signin-google is set as the default callback of the Google authentication provider. 상속을 통해 Google 인증 미들웨어를 구성 하는 동안 기본 콜백 URI를 변경할 수 있습니다 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.
  • 호출 하 여 구성 되어 있지 않으면 Identity 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. 마이그레이션 적용 데이터베이스를 만들고 오류 지 나 새로 고침 합니다.Tap Apply Migrations to create the database and refresh 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.