ASP.NET Core에서 Google 인증 구성Configuring Google authentication in ASP.NET Core

<a name=security-authentication-google-logins>

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

이 자습서에서 만든 샘플 ASP.NET 코어 2.0 프로젝트를 사용 하 여 해당 Google + 계정으로 로그인 하 여 사용자가 사용할 수 있도록 하는 방법을 보여 줍니다.는 이전 페이지합니다.This tutorial shows you how to enable your users to sign in with their Google+ account using a sample ASP.NET Core 2.0 project created on the previous page. 수행 하 여 시작는 공식 단계 Google API 콘솔에서 새 응용 프로그램을 만들려고 합니다.We start by following the official steps to create a new app in Google API Console.

Google API 콘솔에서 응용 프로그램 만들기Create the app in Google API Console

Google API 콘솔

  • 리디렉션됩니다 API 관리자 라이브러리 페이지:You are redirected to API Manager Library page:

API 관리자 라이브러리 페이지

  • 만들기 입력 프로그램 프로젝트 이름을:Tap Create and enter your Project name:

새 프로젝트 대화 상자

  • 대화 상자를 수락한 후 새 응용 프로그램에 대 한 기능을 선택할 수 있도록 라이브러리 페이지에 다시 리디렉션됩니다.After accepting the dialog, you are redirected back to the Library page allowing you to choose features for your new app. 찾을 Google + API 목록과 API 기능을 추가 하려면 해당 링크를 클릭 합니다.Find Google+ API in the list and click on its link to add the API feature:

API 관리자 라이브러리 페이지

  • 새로 추가 된 API에 대 한 페이지가 표시 됩니다.The page for the newly added API is displayed. 사용 기능에서 응용 프로그램에 Google + 기호를 추가 하려면:Tap Enable to add Google+ sign in feature to your app:

API 관리자 Google + API 페이지

  • API를 사용 하도록 설정한 후 탭 자격 증명을 만들어 비밀 정보를 구성 하려면:After enabling the API, tap Create credentials to configure the secrets:

API 관리자 Google + API 페이지

  • 다음 중 하나를 선택합니다.Choose:
    • Google + APIGoogle+ API
    • 웹 서버 (예:: node.js, Tomcat), 및Web server (e.g. node.js, Tomcat), and
    • 사용자 데이터:User data:

API 관리자 자격 증명 페이지: 어떤 종류의 자격 증명에 대해 알아봅니다 패널 필요

  • 하는 자격 증명 필요 합니까? 를 응용 프로그램 구성의 두 번째 단계를 따르세요 OAuth 2.0 클라이언트 ID 만들기:Tap What credentials do I need? which takes you to the second step of app configuration, Create an OAuth 2.0 client ID:

API 관리자 자격 증명 페이지: OAuth 2.0 클라이언트 ID 만들기

  • 한 기능 (로그인), 동일한를 입력할 수 있는 Google + 프로젝트 만들기 때문에 이름 에서는 프로젝트에 대해 사용 되는 OAuth 2.0 클라이언트 id입니다.Because we are creating a Google+ project with just one feature (sign in), we can enter the same Name for the OAuth 2.0 client ID as the one we used for the project.

  • 개발 URI를 입력으로 /signin-google 에 추가 권한이 부여 된 리디렉션 URIs 필드 (예: https://localhost:44320/signin-google).Enter your development URI with /signin-google appended into the Authorized redirect URIs field (for example: https://localhost:44320/signin-google). 이 자습서의 뒷부분에 나오는 구성 된 Google 인증에는 요청을 자동으로 처리할 /signin-google OAuth 흐름을 구현 하는 경로입니다.The Google authentication configured later in this tutorial will automatically handle requests at /signin-google route to implement the OAuth flow.

  • Tab 키를 추가 하는 권한이 부여 된 리디렉션 URIs 항목입니다.Press TAB to add the Authorized redirect URIs entry.

  • 클라이언트 ID 만들기를 세 번째 단계를 따르세요 OAuth 2.0 동의 화면 설정:Tap Create client ID, which takes you to the third step, Set up the OAuth 2.0 consent screen:

API 관리자 자격 증명 페이지: OAuth 2.0 동의 화면 설정

  • 입력에 공용 전자 메일 주소제품 이름 Google + 하 라는 메시지에 로그인 하는 경우 앱에 대 한 표시 합니다.Enter your public facing Email address and the Product name shown for your app when Google+ prompts the user to sign in. 추가 옵션에서 사용할 수 있는 많은 사용자 지정 옵션합니다.Additional options are available under More customization options.

  • 계속 마지막 단계를 진행 하려면 자격 증명을 다운로드:Tap Continue to proceed to the last step, Download credentials:

API 관리자 자격 증명 페이지: 자격 증명 다운로드

  • 다운로드 응용 프로그램의 비밀으로 JSON 파일을 저장 하 고 수행 새 앱 만들기를 완료 합니다.Tap Download to save a JSON file with application secrets, and Done to complete creation of the new app.

  • 다시 방문 해야 사이트를 배포 하는 경우는 Google 콘솔 새 공용 url을 등록 합니다.When deploying the site you'll need to revisit the Google Console and register a new public url.

저장소 Google ClientID 및 ClientSecretStore Google ClientID and ClientSecret

Google와 같은 중요 한 설정이 연결 Client IDClient Secret 사용 하 여 응용 프로그램 구성에는 암호 관리자합니다.Link sensitive settings like Google Client ID and Client Secret to your application configuration using the Secret Manager. 이 자습서에서는 이름을 토큰 Authentication:Google:ClientIdAuthentication:Google:ClientSecret합니다.For the purposes of this tutorial, name the tokens Authentication:Google:ClientId and Authentication:Google:ClientSecret.

이러한 토큰에 대 한 값에서 이전 단계에서 다운로드 한 JSON 파일에서 찾을 수 있습니다 web.client_idweb.client_secret합니다.The values for these tokens can be found in the JSON file downloaded in the previous step under web.client_id and web.client_secret.

Google 인증 구성Configure Google Authentication

이 자습서에 사용 된 프로젝트 템플릿을 사용 하면 Microsoft.AspNetCore.Authentication.Google 패키지를 설치 합니다.The project template used in this tutorial ensures that Microsoft.AspNetCore.Authentication.Google package is installed.

  • Visual Studio 2017으로이 패키지를 설치 하려면 마우스 오른쪽 단추로 클릭 프로젝트와 선택 NuGet 패키지 관리합니다.To install this package with Visual Studio 2017, right-click on the project and select Manage NuGet Packages.
  • .NET Core CLI를 설치 하려면 다음 프로젝트 디렉터리에 실행 합니다.To install with .NET Core CLI, execute the following in your project directory:

    dotnet add package Microsoft.AspNetCore.Authentication.Google

Google 서비스에 추가 ConfigureServices 메서드에서 Startup.cs 파일:Add the Google service in the ConfigureServices method in Startup.cs file:

services.AddIdentity<ApplicationUser, IdentityRole>()
        .AddEntityFrameworkStores<ApplicationDbContext>()
        .AddDefaultTokenProviders();

services.AddAuthentication().AddGoogle(googleOptions =>
{
    googleOptions.ClientId = Configuration["Authentication:Google:ClientId"];
    googleOptions.ClientSecret = Configuration["Authentication:Google:ClientSecret"];
});

참고: 에 대 한 호출 AddIdentity 기본 체계 설정을 구성 합니다.Note: The call to AddIdentity configures the default scheme settings. AddAuthentication(string defaultScheme) 집합 오버 로드는 DefaultScheme 속성 그 뿐만 아니라 AddAuthentication(Action<AuthenticationOptions> configureOptions) 만 명시적으로 설정 하는 속성을 설정 하는 오버 로드 합니다.The AddAuthentication(string defaultScheme) overload sets the DefaultScheme property; and, the AddAuthentication(Action<AuthenticationOptions> configureOptions) overload sets only the properties you explicitly set. 이러한 오버 로드 중 하나 에서만 호출 해야 한 번 추가 하는 경우 여러 인증 공급자.Either of these overloads should only be called once when adding multiple authentication providers. 에 대 한 후속 호출 이전에 구성 된 모든 재정의의 가능성이 있는 AuthenticationOptions 속성입니다.Subsequent calls to it have the potential of overriding any previously configured AuthenticationOptions properties.

참조는 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.

Google을 사용 하 여 로그인Sign in with Google

응용 프로그램을 실행 하 고 클릭 로그인합니다.Run your application and click Log in. Google을 사용 하 여 로그인 하는 옵션이 표시 됩니다.An option to sign in with Google appears:

Microsoft Edge에서 실행 되는 웹 응용 프로그램: 인증 되지 않은 사용자

Google을 클릭할 때 리디렉션됩니다 Google 인증:When you click on Google, you are redirected to Google for authentication:

Google 인증 대화 상자

Google 자격 증명을 입력 한 후 다음 리디렉션됩니다 전자 메일을 설정할 수 있는 웹 사이트에 다시.After entering your Google credentials, then you are redirected back to the web site where you can set your email.

이제 Google 자격 증명을 사용 하 여 로그인:You are now logged in using your Google credentials:

Microsoft Edge에서 실행 되는 웹 응용 프로그램: 인증 된 사용자

문제 해결Troubleshooting

  • 표시 되 면 한 403 (Forbidden) 개발 모드 (또는 동일한 오류가 발생 하 여 디버거를 중단)에서 실행 되 고 있는지 확인 하는 경우 사용자 고유의 응용 프로그램에서 오류 페이지 Google + API 에서 설정 되어는 API관리자라이브러리 나열 된 단계를 수행 하 여 이 페이지에 이전합니다.If you receive a 403 (Forbidden) error page from your own app when running in development mode (or break into the debugger with the same error), ensure that Google+ API has been enabled in the API Manager Library by following the steps listed earlier on this page. 로그인의 작동 하지 않는 경우 오류가 나타나지 문제를 보다 쉽게 디버그 하려면 개발 모드로 전환 합니다.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.
  • ASP.NET Core 2.x만: 경우 Identity를 호출 하 여 구성 되지 않은 services.AddIdentityConfigureServices, 인증을 시도 하면 ArgumentException: 'SignInScheme' 옵션을 제공 해야합니다.ASP.NET Core 2.x only: If Identity is not configured by calling services.AddIdentity in ConfigureServices, attempting to authenticate will result 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 will 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 your web site to Azure web app, you should reset the ClientSecret in the Google API Console.

  • 설정의 Authentication:Google:ClientIdAuthentication:Google:ClientSecret Azure 포털에서 응용 프로그램 설정으로 합니다.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.