ASP.NET Core의 Google 외부 로그인 설정

작성자: Valeriy NovytskyyRick Anderson

이 자습서에서는 사용자가 이전 페이지에서 만든 ASP.NET Core 3.0 프로젝트를 사용하여 Google 계정으로 로그인할 수 있도록 하는 방법을 보여 줍니다.

Google API 콘솔 프로젝트 및 클라이언트 ID 만들기

  • Microsoft.AspNetCore.Authentication.Google NuGet 패키지를 앱에 추가합니다.
  • Google 로그인을 웹앱에 통합(Google 설명서)에 나와 있는 지침을 따릅니다.
  • Google 콘솔자격 증명 페이지에서 자격 증명 만들기 > OAuth 클라이언트 ID 를 선택합니다.
  • 애플리케이션 종류 대화 상자에서 웹 애플리케이션 을 선택 합니다. 앱의 이름 을 입력합니다.
  • 권한 있는 리디렉션 URI 섹션에서 URI 추가 를 선택하여 리디렉션 URI를 설정합니다. 예제 리디렉션 URI: https://localhost:{PORT}/signin-google, 여기서 {PORT} 자리 표시자는 앱의 포트입니다.
  • 만들기 단추를 선택합니다.
  • 앱의 구성에서 사용할 클라이언트 ID클라이언트 암호 를 저장합니다.
  • 사이트를 배포할 때 다음 중 하나를 수행합니다.
    • Google 콘솔 에서 앱의 리디렉션 URI를 앱의 배포된 리디렉션 URI로 업데이트합니다.
    • 프로덕션 리디렉션 URI를 사용하여 프로덕션 앱에 대한 Google 콘솔 에서 새 Google API 등록을 만듭니다.

Google 클라이언트 ID 및 암호 저장

비밀 관리자를 사용하여 Google 클라이언트 ID 및 암호 값과 같은 중요한 설정을 저장합니다. 이 샘플의 경우 다음 단계를 사용합니다.

  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 인증 구성

Startup.ConfigureServices에 Google 서비스를 추가합니다.

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 에 대 한 호출은 기본 구성표 설정을 구성 합니다. Addauthentication (String) 오버 로드는 defaultscheme 속성을 설정 합니다. Addauthentication (Action<AuthenticationOptions>) 오버 로드를 사용 하면 다양 한 용도로 기본 인증 체계를 설정 하는 데 사용할 수 있는 인증 옵션을 구성할 수 있습니다. AddAuthentication에 대 한 후속 호출은 이전에 구성 된 Authenticationoptions 속성을 재정의 합니다.

인증 처리기를 등록 하는 Authenticationbuilder 확장 메서드는 인증 체계 당 한 번만 호출할 수 있습니다. 체계 속성, 체계 이름 및 표시 이름을 구성할 수 있는 오버 로드가 있습니다.

Google로 로그인

  • 앱을 실행하고 로그인 을 클릭합니다. Google로 로그인할 수 있는 옵션이 나타납니다.
  • Google 단추를 클릭합니다. 인증을 위해 Google로 리디렉션됩니다.
  • Google 자격 증명을 입력하면 웹 사이트로 다시 리디렉션됩니다.

프록시 또는 부하 분산 장치를 사용하여 요청 정보 전달

앱이 프록시 서버 또는 부하 분산 장치 뒤에 배포되는 경우 원래 요청 정보의 일부가 요청 헤더로 앱에 전달될 수 있습니다. 이 정보에는 일반적으로 보안 요청 체계(https), 호스트 및 클라이언트 IP 주소가 포함됩니다. 앱은 원래 요청 정보를 검색 및 사용하기 위해 이 요청 헤더를 자동으로 읽지 않습니다.

이 체계는 외부 공급자의 인증 흐름에 영향을 주는 링크 생성에 사용됩니다. 보안 체계(https)가 손실되면 앱이 잘못되고 안전하지 않은 리디렉션 URL을 생성합니다.

전달된 헤더 미들웨어를 사용하여 요청 처리를 위한 원본 요청 정보를 앱에 제공합니다.

자세한 내용은 프록시 서버 및 부하 분산 장치를 사용하도록 ASP.NET Core 구성를 참조하세요.

여러 인증 공급자

앱에 여러 공급자가 필요한 경우 AddAuthentication 뒤에 공급자 확장 메서드를 연결합니다.

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

Google 인증에서 지원하는 구성 옵션에 대한 자세한 내용은 GoogleOptions API 참조를 확인하세요. 사용자에 대한 다른 정보를 요청하는 데 사용할 수 있습니다.

기본 콜백 URI 변경

URI 세그먼트 /signin-google은 Google 인증 공급자의 기본 콜백으로 설정됩니다. GoogleOptions 클래스의 상속된 RemoteAuthenticationOptions.CallbackPath 속성을 통해 Google 인증 미들웨어를 구성하는 동안 기본 콜백 URI를 변경할 수 있습니다.

문제 해결

  • 로그인이 작동하지 않고 오류가 발생하지 않는 경우 개발 모드로 전환하면 문제를 더 쉽게 디버깅할 수 있습니다.
  • ConfigureServices에서 services.AddIdentity를 호출하여 Identity를 구성하지 않은 경우 인증을 시도하면 ArgumentException: ‘SignInScheme’ 옵션을 제공해야 함 이라고 표시됩니다. 이 자습서에서 사용되는 프로젝트 템플릿은 이 작업을 수행하도록 보장합니다.
  • 초기 마이그레이션을 적용하여 사이트 데이터베이스를 만들지 않은 경우 요청을 처리하는 동안 데이터베이스 작업이 실패했습니다 오류가 표시됩니다. 마이그레이션 적용 을 선택하여 데이터베이스를 만들고 페이지를 새로 고쳐 오류를 무시하고 계속합니다.

다음 단계

  • 이 문서에서는 Google로 인증할 수 있는 방법을 살펴보았습니다. 비슷한 방식을 따라 이전 페이지에 나열된 다른 공급자로 인증할 수 있습니다.
  • Azure에 앱을 게시한 후에는 Google API 콘솔에서 ClientSecret을 다시 설정합니다.
  • Azure Portal에서 Authentication:Google:ClientIdAuthentication:Google:ClientSecret을 애플리케이션 설정으로 설정합니다. 구성 시스템은 환경 변수에서 키를 읽도록 설정됩니다.